3.3. 使用带有网络连接的 MQTT


代理支持 MQTT v3.1.1 和 v5.0 (以及旧的 v3.1 代码消息格式)。MQTT 是一个轻量级、客户端到服务器,发布/订阅消息传递协议。MQTT 减少了消息传递开销和网络流量,以及客户端的代码占用。因此,MQTT 非常适合受限设备,如传感器和参与者,并快速成为物联网(IoT)的事实标准通信协议。

流程

  1. 打开 & lt;broker_instance_dir> /etc/broker.xml 配置文件。
  2. 添加启用了 MQTT 协议的接收器。例如:
<acceptors>
  <acceptor name="mqtt">tcp://localhost:1883?protocols=MQTT</acceptor>
  ...
</acceptors>

MQTT 带有一些有用的功能,其中包括:

服务质量
每个消息都可以定义与其关联的服务质量。代理将尝试在定义最高服务质量级别向订阅者发送信息。
保留消息

可以为特定地址保留消息。该地址的新订阅者在任何其他消息之前收到最后的保留消息,即使客户端连接之前发送了保留的消息。

保留的消息会存储在名为 sys.mqtt.<topic name& gt; 并保留在队列中的队列中,直到客户端删除保留的消息,或者如果配置了到期,直到消息过期为止。当队列为空时,队列不会被删除,直到您显式删除它。例如,以下配置会删除队列:

<address-setting match="$sys.mqtt.retain.#">
   <auto-delete-queues>true</auto-delete-queues>
   <auto-delete-addresses>true</auto-delete-addresses>
</address-setting>
通配符订阅
MQTT 地址是分级的,类似于文件系统的层次结构。客户端可以订阅特定主题或整个层次结构分支。
将消息
客户端可以设置"will 消息"作为其连接数据包的一部分。如果客户端正常断开连接,代理会将消息发布到指定的地址。其他订阅者收到该消息,并可相应地做出反应。

有关 MQTT 协议的更多信息,请参阅规范。

3.3.1. 配置 MQTT 属性

您可以将键值对附加到 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 消息数来启用流控制。默认值为 65535。值 -1 禁用从客户端到代理的 flow-control。这与将值设置为 0 的影响相同,但会减少 CONNACK 数据包的大小。
topicAliasMaximum
为客户端指定代理支持的最大别名数。默认值为 65535。值 -1 会阻止代理告知客户端主题别名限制。这与将值设置为 0 的效果相同,但会减少 CONNACK 数据包的大小。
maximumPacketSize
指定代理可以从客户端接受的最大数据包大小。默认值为 268435455。值 -1 会阻止代理告知客户端的最大数据包大小,这意味着在传入的数据包的大小中不会强制实施任何限制。
serverKeepAlive
指定代理保持不活跃客户端连接打开的持续时间。只有在为客户端配置了 keep-alive 值或为客户端配置的值时,配置的值才会应用到连接。默认值为 60 秒。-1 表示代理总是接受客户端的保留值(即使该值为 0)。
closeMqttConnectionOnPublishAuthorizationFailure
默认情况下,如果因为缺少授权而导致 PUBLISH 数据包失败,代理会关闭网络连接。如果您希望代理发送正确认而不是关闭网络连接,请将 closeMqttConnectionOnPublishAuthorizationFailure 设置为 false
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.