4.0.0 版本
发布日期: 2020-01-18
Introduction
在这个版本中,我们通过重构会话和通道显著地提高了代理的吞吐量,通过添加更多的hooks和计数器改进了可扩展性和可监控性,重新设计了规则引擎SQL来主要根据主题过滤消息/事件。在REST api、身份验证插件和MQTT客户机方面也有很多改进。
The Broker
提高了代理的吞吐量::
Session进程被删除。现在,所有关于会话和连接的逻辑都放到了单个进程中。这极大地提高了代理的吞吐量。在我们的一个基准测试中,我们在一个具有16个CPU核心的节点上实现了QoS0消息的最大吞吐量100万TPS。另一项测试显示,emqx能够在一个节点上处理200万个并发连接,并且只使用大约17G内存。有关更多信息,请参见emqx v4.0.0的基准测试报告。
优化了对MQTT数据包的处理:
对MQTT包的处理进行了很大的更改,以使代码基更简洁。有关更多信息,请参见模块emqx_channel。
改进的指标:
我们重命名了一些计数器,也增加了更多的计数器:
- client.connect
- client.connack
- client.connected
- client.authenticate
- client.check_acl
- client.subscribe
- client.unsubscribe
- client.disconnected
- session.created
- session.resumed
- session.takeovered
- session.discarded
- session.terminated
改善了 hooks:
我们修改了一些 hooks 的参数,增加了更多的 hook-points:
- client.connect: MQTT CONNECT Packet Received
- client.connack: MQTT CONNACK Packet Sent
- client.connected: The MQTT Client is connected
- client.disconnected: The MQTT Client is disconnected
- client.authenticate: Authenticate the MQTT Client
- client.check_acl: Check Pub/Sub ACL
- client.subscribe: MQTT SUBSCRIBE Packet Received
- client.unsubscribe: MQTT UNSUBSCRIBE Packet Received
- session.created: A new session is created
- session.subscribed: After session subscribed a topic
- session.unsubscribed: After session unsubscribed a topic
- session.resumed: A session is resumed
- session.takeovered: A session is takeovered
- session.discarded: A session is discarded
- session.terminated: A session is terminated
- message.publish: A message is published
- message.delivered: A message is delivered
- message.acked: A messaeg is acked
- message.dropped: A message is dropped due to no subscribers
修正了SSL握手失败会导致进程崩溃的问题:
以保护进程崩溃,并在SSL握手失败时给出可读的错误日志消息。
修复了
max_subscriptions
不能工作的问题: emqx/emqx#2908 (opens new window)修正了跨集群转发时出现的消息无序问题:
节点间消息通过多个RPC通道发送,默认选择通道的策略是随机的。这将导致相同主题的消息在发送到其他节点后出现顺序混乱。在这个修复中,我们将默认策略更改为按主题的哈希值。
Fixed the issue that REST API and CLI cannot get multiple routes for a topic:
修正了REST API和CLI不能为一个主题获取多个路由的问题: emqx/emqx-management#150 (opens new window).
REST API
在REST API中支持IPv6:
现在所有的REST API都支持IPv6。
HTTP API服务器的默认监听端口从8080改为8081:
旧的 HTTP API 默认8080端口很容易与同一节点上运行的其他服务发生冲突。我们把默认值改为8081。
重新设计用于会话和连接的api
支持在订阅API中返回共享订阅的真实主题:
支持配置默认的AppID和AppSecret:
现在默认的AppID和AppSecret可以在
etc/emqx_management.conf
中配置。发布消息的HTTP API现在支持base64编码的有效载荷:
有些用户可能希望通过HTTP API发布二进制消息。通过这个特性,他们可以通过发送一个base64编码的有效负载来实现这一点。
修正了URI编码处理不正确的问题
身份认证插件
支持在配置文件中定义HTTP请求头。
支持在配置文件中配置默认的clientids和用户名:
该特性已从 EMQ X V3.0中删除,现在再次添加。
MQTT 客户端 (emqtt (opens new window))
- emqtt为发布和订阅提供了命令行接口。
规则引擎 (emqx-rule-engine (opens new window))
重新设计的规则引擎的SQL:
规则引擎的SQL在它的FROM子句中做了一点更改。旧的语法是这样的:
SELECT * FROM "message.publish"
现在改为:
SELECT * FROM "t/#"
因此,它现在主要根据主题过滤消息/事件。如果主题不匹配,此更改将阻止规则引擎处理SELECT子句,从而提高了性能。