3.3. 使用带有网络连接的 mq
代理支持 mq v3.1.1 和 v5.0 (以及旧的 v3.1 代码消息格式)。MQTT 是服务器的轻量级客户端,发布/订阅消息传递协议。MQTT 减少了消息传递开销和网络流量,以及客户端的代码占用。因此,MQTT 更适用于受限制的设备,如传感器和行为器,并快速成为面向互联网(IoT)的标准通信协议。
流程
-
打开 &
lt;broker_instance_dir> /etc/broker.xml
配置文件。 - 添加启用了 mq 协议的 acceptor。例如:
<acceptors> <acceptor name="mqtt">tcp://localhost:1883?protocols=MQTT</acceptor> ... </acceptors>
MQTT 带有一些有用的功能,其中包括:
- 服务质量
- 每个消息都可以定义与其关联的服务质量。代理会尝试在定义的最高服务质量级别向订阅者发送信息。
- 保留的消息
可以为特定地址保留消息。该地址的新订阅者会在任何其他消息之前接收最后的保留消息,即使在客户端连接前发送保留的消息。
保留的消息存储在名为
sys.mqtt.<topic name>
; 的队列中,并保留在队列中,直到客户端删除保留的消息,或者如果配置了到期,直到消息过期为止。当队列为空时,队列不会被删除,直到您明确删除队列。例如,以下配置删除队列:<address-setting match="$sys.mqtt.retain.#"> <auto-delete-queues>true</auto-delete-queues> <auto-delete-addresses>true</auto-delete-addresses> </address-setting>
- 通配符订阅
- MQTT 地址是分层的,类似于文件系统的层次结构。客户端可以订阅特定的主题或层次结构的整个分支。
- 将消息
- 客户端可以将"will 消息"设置为连接数据包的一部分。如果客户端通常断开连接,代理会将消息发布到指定的地址。其他订阅者会收到消息,并可相应地做出反应。
有关 mq 协议的更多信息,请参阅规格。
3.3.1. 配置 mq 属性
您可以将键值对附加到 MQTT acceptor 中,以配置连接属性。例如:
<acceptors> <acceptor name="mqtt">tcp://localhost:1883?protocols=MQTT;receiveMaximum=50000;topicAliasMaximum=50000;maximumPacketSize;134217728; serverKeepAlive=30;closeMqttConnectionOnPublishAuthorizationFailure=false</acceptor> ... </acceptors>
- receiveMaximum
-
通过指定代理在需要确认前可以从客户端接收的最大 QoS 1 和 2 个消息启用 flow-control。默认值为
65535
。-1
代表禁用客户端到代理的 flow-control。这与将值设为 0 的影响相同,但减少了 CONNACK 数据包的大小。 - topicAliasMaximum
-
为客户端指定代理支持的最大别名数。默认值为
65535
。-1 代表代理通知客户端主题别名限制。这与将值设为 0 的效果相同,但减少了 CONNACK 数据包的大小。 - maximumPacketSize
-
指定代理可以从客户端接受的最大数据包大小。默认值为
268435455
。值 -1 可防止代理通知客户端最大数据包大小,这意味着对传入的数据包的大小不会强制实施任何限制。 - serverKeepAlive
-
指定代理保持打开不活跃的客户端连接的持续时间。只有在为客户端配置的 keep-alive 值或客户端配置的值为 0 时,配置的值才会应用到连接。默认值为
60
秒。-1
表示代理总是接受客户端的 keep alive 值(即使该值为 0)。 - closeMqttConnectionOnPublishAuthorizationFailure
-
默认情况下,如果因为缺少授权而 PUBLISH 数据包失败,代理会关闭网络连接。如果您希望代理发送正确认而不是关闭网络连接,请将
closeMqttConnectionAuthorizationFailure
设置为false
。