`
can_do
  • 浏览: 263597 次
  • 性别: 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

    标题中的"emqx-windows10-v3.2.2.zip"指的是EMQ X Broker的Windows 10版本的软件包,版本号为3.2.2。EMQ X Broker是一款开源的、高度可扩展的 MQTT 消息代理,专为物联网(IoT)设计,支持大规模设备连接和消息处理...

    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

    EMQ X 是一款高度可扩展、高性能的 MQTT 消息代理,它是一个开源的 MQTT 服务器,专为物联网(IoT)设计。标题中的 "emqx-4.2.5.zip" 指的是 EMQ X 的特定版本,4.2.5,这个版本已经打包成 ZIP 压缩文件供用户下载和...

    emq_plugin_kafka

    使用emq_plugin_kafka插件,需要在EMQ X Broker的配置文件中启用该插件,并设置相关的Kafka服务器地址、端口、主题等参数。部署后,所有通过EMQ X Broker发布的消息都可以自动转发到Kafka。 7. **应用场景**: - ...

    emqx配置和安装.docx

    EMQX 配置和安装指南 EMQX 是基于 Erlang/OTP 平台开发的开源物联网 MQTT 消息服务器。它的设计目标是实现高可靠,并支持承载海量物联网终端的 MQTT 连接,支持在海量物联网设备间低延时消息路由。EMQX 可以稳定...

    emqx-web-hook:emqx_web_hook

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

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

    EMQX,全称是Erlang MQTT Broker,是一个基于Erlang/OTP构建的开源物联网 MQTT 消息中间件。MQTT(Message Queuing Telemetry Transport)是一种轻量级的发布/订阅式消息协议,常用于物联网、移动应用、低带宽、高...

    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数据 构建插件 做&&做测试 ...

    EMQX开启SSL/TSL及生成证书流程

    EMQX,全称Erlang MQTT Broker,是一款基于Erlang OTP构建的开源MQTT消息代理,广泛应用于物联网(IoT)环境。MQTT(Message Queuing Telemetry Transport)是一种轻量级的发布/订阅协议,适用于低带宽、高延迟或不...

    emq_auth_redis.tar.gz

    在本压缩包“emq_auth_redis.tar.gz”中,包含了一个使用 Redis 作为身份验证和授权插件的配置,用于增强 EMQ 的安全性和管理能力。Redis 是一个开源的、基于键值的数据存储系统,常用于缓存、数据库和消息队列等...

    docker dockerFile 一键部署 emqx

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

    emqx-windows-4.2.7.zip

    在 4.2.7 版本中,EMQ X 提供了以下关键特性: 1. **大规模并发连接**:EMQ X 能够支持数十万甚至百万级别的并发 MQTT 连接,这使得它非常适合处理大量设备同时在线的情况。 2. **发布/订阅模型**:MQTT 的核心是...

    EMQX_MQTT_MySQL.zip

    本文将详细讲解如何使用ESP8266微控制器通过MQTT协议将数据发送到EMQX MQTT服务器,并进一步将这些数据存储到MySQL数据库中。ESP8266是一款流行的WiFi模块,广泛应用于物联网(IoT)项目,因其低成本和强大功能而备受...

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

    在实际应用中,根据需求调整EMQX的配置参数,如最大连接数、内存限制、日志级别等,以优化性能和安全性。 总之,EMQX是一个强大且灵活的MQTT消息代理,适合于各种物联网场景,而“emqx-4.4.3-otp24.2.1-windows-amd...

    emqx-windows-4.3.11.zip

    以下是关于 EMQ X 和 MQTT 协议,以及在 Windows 上部署和使用 EMQ X 的一些关键知识点: 1. **MQTT 协议**:MQTT 是一种轻量级、发布/订阅模式的消息协议,适用于低带宽、高延迟或不稳定网络环境,广泛应用于...

    emqx-centos7-4.2.7-x86-64

    mqtt服务器,参考安装文章:https://mp.csdn.net/mp_blog/creation/success/140184385

    emqx-5.3.2-windows-amd64

    EMQ X Broker 5.3.2 版本提供了一些关键功能: 1. **大规模连接**:支持百万级别的设备并发连接,适合大规模物联网场景。 2. **消息路由**:智能路由机制确保消息高效、可靠地传递到订阅者。 3. **安全机制**:支持...

    emq_plugin_kafka_ekaf

    总结来说,`emq_plugin_kafka_ekaf` 插件是连接EMQ与Kafka的关键桥梁,它使得MQTT消息能够方便地流向Kafka,从而满足各种数据处理需求。通过充分利用EMQ的Hook机制,我们可以灵活控制消息的流向,实现高效的数据集成...

    emqx的如下版本emqx-windows-4.2.5.zip

    emqx的如下版本emqx-windows-4.2.5.zip emqx的如下版本emqx-windows-4.2.5.zipemqx的如下版本emqx-windows-4.2.5.zipemqx的如下版本emqx-windows-4.2.5.zip

    emqx-management:emqx_management

    在 EMQ X 的生态系统中,"emqx-management" 是一个关键组件,它提供了对 EMQ X 集群的管理和监控功能。这个组件通常通过 RESTful API 来实现远程操作,如启动、停止、配置修改等,极大地便利了运维人员对 EMQ X 的...

Global site tag (gtag.js) - Google Analytics