`
can_do
  • 浏览: 249800 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

EMQ X关键参数解析之can_do

阅读更多
EMQ X关键参数解析

EMQ X版本为【emqx 3.1.0 is started successfully!】

1、参数位置:【<emqx_home>/etc/emqx.conf】

1> zone.external.max_awaiting_rel = 4000
## Maximum QoS2 packets (Client -> Broker) awaiting PUBREL, 0 means no limit.
##
## Value: Number
此参数控制每次连接publish消息到Topic的数量,如果持久订阅者不在线,则消息会先进入到message_queue中,或者inflight窗口满时,消息会缓存到message_queue,这个参数反映message_queue的长度。
通过zone.external.max_inflight = 1000参数控制,注意inflight队列中的消息,会有retry机制。

注意:参数zone.external.max_awaiting_rel默认值为0,即不限制;

2> zone.external.max_inflight = 1000
## Maximum size of the Inflight Window storing QoS1/2 messages delivered but unacked.
##
## Value: Number
此参数控制未应答消息的最大数量,针对QoS1和QoS2类的消息,进入此队列的消息可能出现重发或者丢失,取决于另一个参数zone.external.retry_interval;

飞行窗口(Inflight Window)保存当前正在发送未确认的 Qos1/2 消息。窗口值越大,吞吐越高;窗口值越小,消息顺序越严格。

当客户端离线或者飞行窗口(Inflight Window)满时,消息缓存到队列。如果消息队列满,先丢弃 Qos0 消息或最早进入队列的消息。

3> zone.external.retry_interval = 60s
## Retry interval for QoS1/2 message delivering.
##
## Value: Duration
此参数控制飞行中消息重试间隔,如果在重试间隔内,发送消息已结束,则不触发重试,可能导致消息丢失
如果在重试间隔内,发送消息已结束,则触发重试,可能导致消息重复消费。

注意:参数zone.external.retry_interval默认值为20s。

4> listener.tcp.external.max_conn_rate = 1000
此参数控制,客户端pub/sub,连接到emqx的速率,以每秒为单位,即1000Cps

5> listener.tcp.external.rate_limit = 1024,4096
## Rate limit for the external MQTT/TCP connections. Format is 'rate,burst'.
##
## Value: rate,burst
## Unit: Bps
此参数单位为Bps,类似带宽控制,用于消息限流,此参数要谨慎使用,触发限流条件后,会导致inflight消息增加,可能发生仅收取带宽数量内的消息,
后续消息可能收取不到。

此参数默认是关闭的

6> zone.external.session_expiry_interval = 30m
## Default session expiry interval for MQTT V3.1.1 connections.
##
## Value: Duration
## -d: day
## -h: hour
## -m: minute
## -s: second
##
## Default: 2h, 2 hours
此参数控制session过期间隔扫描周期,默认是2小时,扫描一次是否过期,持久化订阅在某些情况(不正常失效时),可导致同一个clientId不能再次发起持久化订阅。
建议此参数配置小一点,比如30minute

7> 【共享订阅】
## - random
## - round_robin
## - sticky
## - hash
>>>broker.shared_subscription_strategy = round_robin
>>>zone.external.shared_subscription = true
>>>broker.shared_dispatch_ack_enabled = true

EMQ X支持共享订阅,类似Kafka的consumer_group,共享订阅同一个topic时,相当对该topic进行分发消费,而不是备份消费。

pub端正常向指定topic发消息
sub端需要配置成共享订阅方式,通过topic名称区分,即$share+<group_name>+topic,在原topic前添加共享订阅标记和分组标记,比如:$share/cnd/YourCompanyTm/02012345678/+

注意:broker.shared_subscription_strategy默认是random策略,而zone.external.shared_subscription和broker.shared_dispatch_ack_enabled默认都是false

8> 【对外TCP参数】
## The TCP send timeout for external MQTT connections.
##
## Value: Duration
# remedied by can_do on 2019-10-22
listener.tcp.external.send_timeout = 60s

## Close the TCP connection if send timeout.
##
## Value: on | off
# remedied by can_do on 2019-10-22 on -> off
listener.tcp.external.send_timeout_close = on

注意:参数listener.tcp.external.send_timeout控制外部通过tcp连接到MQTT server节点时发送消息的超时时间,如果超过此时间,则通过另一个匹配参数(listener.tcp.external.send_timeout)决定是否关闭外部的tcp连接。

EMQX区分exteral和interal,external是客户端应用连接EMQX节点的参数控制;internal是EMQX集群节点间连接的参数控制。

9> Broker端对外部连接的空闲超时时间配置,超过此空闲时间,Broker会主动断开连接
一般业务一个用场景是,需要客户端周期性发送心跳数据,比如间隔30s一次;
## Idle timeout of the external MQTT connections.
##
## Value: duration
# remedied by can_do on 2019-10-25 15->45
zone.external.idle_timeout = 45s

通过telnet后是否输入数据包,可以验证EMQX服务端idle时间是否生效

服务端通过命令监控:watch -n 1 -d "netstat -anop|grep 1883"

【写在最后】
注意:如果配置参数写别或者配置错误,可以通过前台方式启动EMQX,例如:/emqx console,看错误详情:
# /opt/emqx/bin/emqx --help
Usage: emqx {start|start_boot <file>|ertspath|foreground|stop|restart|reboot|pid|ping|console|console_clean|console_boot <file>|attach|remote_console|upgrade|escript|rpc|rpcterms|eval}
#/opt/emqx/bin/emqx console
2019-10-23T20:23:02.195802+08:00 [error] You've tried to set /istener.tcp.internal.max_conn_rate, but there is no setting with that name.
2019-10-23T20:23:02.195936+08:00 [error] Did you mean one of these?
2019-10-23T20:23:02.271065+08:00 [error] listener.tcp.$name.max_conn_rate
2019-10-23T20:23:02.271199+08:00 [error] listener.ssl.$name.max_conn_rate
2019-10-23T20:23:02.271236+08:00 [error] listener.ws.$name.max_conn_rate
2019-10-23T20:23:02.309120+08:00 [error] Error generating configuration in phase transform_datatypes
2019-10-23T20:23:02.309247+08:00 [error] Conf file attempted to set unknown variable: /istener.tcp.internal.max_conn_rate


【温馨提示】
如果您觉得满意,可以选择支持下,您的支持是我最大的动力:

分享到:
评论

相关推荐

    emqx-windows10-v3.2.2.zip

    解压下载后的文件夹,找到bin目录,启动服务:emqx start,查看服务状态:emqx_ctl status,服务启动成功

    window下的EMQX软件包

    解压后-&gt;dos窗口进入解压目录-&gt;emqx start/console启动MQTT服务。 PS D:\Program Files\emqx\bin&gt; .\emqx start D:\Program Files\emqx\bin&gt;set args_file=-args_file "D:\Program Files\emqx\etc\vm.args" D:\...

    emqx-4.2.5.zip

    emqx开源版本, 已经编译好, 包含 emqx_bridge_kafka插件(来源于github上的开源项目), 把消息桥接到kafka.

    emqx-web-hook:emqx_web_hook

    emqx-web-hook EMQ X Webhook插件。emqx_web_hook.conf web.hook.api.url = ...

    emqx配置和安装.docx

    emqx

    emq_plugin_kafka

    emq连接kafka,并发布消息到kafka的emq插件。插件主要使用emq的钩子函数,将数据通过ekaf发送到kafka中。

    emqx_bridge_kafka

    emqx_bridge_kafka 桥接EMQX到kafka 特征 _build / default / lib /墨鱼/ _build / escript / bin /墨鱼-e etc -c ./etc/emqx_bridge_kafka.conf -i priv / emqx_bridge_kafka.schema -d数据 构建插件 做&&做测试 ...

    docker dockerFile 一键部署 emqx

    部署MQTT Server(EMQX) 包括emqx的dockerFile和配置文件,只需要按步骤执行两条命令就可迅速部署emqx。 步骤: 1.解压 ,配置emqx_auth_redis.conf中redis连接地址 2.进入解压目录,执行docker build . 得到镜像 3...

    emqx-windows-4.3.8.zip

    emqx-windows-4.3.8.zip mqtt 客户端软件 windows版本 mqtt 客户端软件 windows版本 emqx-windows-4.3.8.zip emqx-windows-4.3.8.zip emqx-windows-4.3.8.zip emqx-windows-4.3.8.zip emqx-windows-4.3.8.zip emqx-...

    emqx-ubuntu16.04-v3.2.6.zip

    MQTT EMQX ubuntu 16.04 下验证可以用版本 v3.2.6 使用方法 1. unzip and run $ unzip emqx-ubuntu14.04-v3.0.0.zip $ ./bin/emqx start emqx 3.1.0 is started successfully! $ ./bin/emqx_ctl status Node 'emq...

    EMQX_MQTT_MySQL.zip

    (ESP8266代码)一种基于Wemos(ESP8266)将数据通过MQTT上传至EMQX服务器并转存到MySQL的方法

    emqx-4.4.3-otp24.2.1-windows-amd64.zip

    emqx

    emqx-windows-4.2.7.zip

    emqx-windows-4.2.7.zip,mqtt服务器

    emqx-management:emqx_management

    emqx管理EMQ X管理API如何设计RESTful API?

    emqx-reloader:emqx_reloader

    emqx重新加载器 用于开发的Erlang模块热重装器。 注意:请勿在生产环境中加载插件。 配置插件 文件:etc / emqx_reloader.conf ## Interval of hot code reloading. ## ## Value: Duration ## - h: hour ## - m: ...

    最简单好用的MQTT工具,特别是对emqx支持

    emqx MQTT工具,简单好用, MQTT工具针对emqx,自己编写的,很好用的,emqx 最简单好用的MQTT工具,特别是对emqx支持

    emqx-windows-v3.2.3.zip

    Windows 通过 emqx.io 或 github 选择 Windows 版本,然后下载要安装的 .zip 包。 解压压缩包 打开 Windows 命令行窗口,cd 到程序目录, 启动 EMQ X。 cd emqx/bin emqx start

    emqx-ubuntu18.04-v3.2.3_amd64.deb

    emq在Ubuntu18.04系统上的部署安装包,下载后运行命令sudo dpkg -i emqx-ubuntu18.04-v3.2.3_amd64.deb 安装

    emqx-dashboard:emqx_dashboard

    emqx仪表板 EMQ X Broker的仪表板。 REST API REST API的前缀为“ / api / v4 /”。 方法 小路 描述 得到 /节点/ 集群中的节点列表 得到 /节点/:节点 在集群中查找节点 得到 /经纪人/ 集群中的经纪人列表 得到 ...

    emqx安装包,老版本的,新的版本没有http监听器

    emqx安装包,老版本的,新的版本没有http监听器

Global site tag (gtag.js) - Google Analytics