跳至主要内容

MQTT 适配器

·阅读时长:5 分钟
Emile Joubert

我为 RabbitMQ 写了一个插件,它添加了对 MQTT 3.1 协议的支持。MQ Telemetry Transport 是一种轻量级的 PUB/SUB 协议,专为资源受限的设备和带宽有限的情况而设计,非常适合传感器和移动设备。该实现是一个协议适配器插件,允许 MQTT 客户端同时连接到 RabbitMQ 代理,以及实现其他协议的客户端。我们鼓励需要在可靠、可扩展的代理上结合低开销协议、高可靠性和企业功能的项目考虑此选项。

支持的功能

QoS 0 和 QoS 1

MQTT 适配器支持 QoS 0(至多一次)和 QoS 1(至少一次)语义。在 MQTT 中,QoS 与传输保证以及持久性有关 - 插件同时满足两者。虽然客户端可以请求 QoS 2 订阅,但适配器只会授予最高 QoS 1 的订阅。

遗嘱和遗嘱(LWT)

客户端可以在连接期间提供 LWT 消息,该消息只有在客户端意外断开连接时才会发布,例如由于网络故障。

粘性会话

客户端可以使用粘性(或非清除)会话来确保他们在断开连接时发布的消息。

默认登录

可以选择配置默认身份验证详细信息,以便 MQTT 适配器以默认用户身份对 RabbitMQ 代理进行身份验证,以防连接的 MQTT 客户端未提供任何登录详细信息。

扩展功能

虽然没有明确列出,但所有核心代理功能都可供 MQTT 客户端使用。

MQTT 订阅通配符受到限制,它们只能作为后缀出现。AMQP 主题不受此限制,因此通配符可以出现在任何位置。MQTT 适配器实现了更灵活的 AMQP 模式,但使用 MQTT 语法。

MQTT 规范没有提到 SSL 或者 SSL 与身份验证之间的任何交互。MQTT 适配器现在包括 SSL 功能,并有可能在将来将证书与身份验证集成。

MQTT 的“桥接”概念可以通过 RabbitMQ 的 联合 来实现,方法是联合 MQTT 适配器发布到的交换机。

未来功能

AMQP 0-9-1 没有为消息传递定义“恰好一次”语义。出于这个原因,MQTT 适配器不支持在 QoS 2(恰好一次)级别发布消息,也不支持与客户端交换 PUBREC、PUBREL 或 PUBCOMP 消息。

“保留消息”是 MQTT 的一项功能,其中代理会保留标记的消息,并将其传递给未来的订阅客户端。例如,在传感器读数的主题中,保留消息允许客户端接收上次读数,而无需等待下一次读数。默认情况下,AMQP 0-9-1 交换机不会保留任何消息状态。因此,MQTT 适配器不会尝试遵守“保留”标志,该标志将被静默忽略。

这些是我们特别希望获得社区反馈的领域。为 MQTT 客户端以及(扩展的)AMQP 和其他客户端增强核心代理的功能,这方面是有空间的 - 只要有足够的需求。

与其他 MQTT 实现的互操作性

MQTT 适配器已成功与以下产品的 MQTT 客户端一起测试,前提是将操作限制在支持的功能范围内

  • Really Small Message Broker
  • Mosquitto
  • Paho
  • WebSphere MQ

与其他协议的互操作性

MQTT 适配器使用一个可配置的交换机进行发布,订阅被实现为 AMQP 绑定。结合起来,这些允许与任何了解交换机名称或 MQTT 客户端使用的主题的客户端进行互操作。

安装

首先确保您已安装 rabbitmq-server 2.8.6。(该插件也应与其他 v2.8.x 版本兼容。)

MQTT 适配器目前作为预览版本提供。在它被包含在未来版本的常规插件中之前,您必须手动下载并安装该插件。可以从 预览版本下载 下载插件,例如:

wget https://rabbitmq.cn/releases/plugins/v2.8.6-mqtt-preview/rabbitmq_mqtt-2.8.6.ez

*.ez 文件必须复制到 插件目录。在我的基于 Debian 的工作站上,它位于 /usr/lib/rabbitmq/lib/rabbitmq_server-2.8.6/plugins

sudo cp rabbitmq_mqtt-2.8.6.ez /usr/lib/rabbitmq/lib/rabbitmq_server-2.8.6/plugins

使用 rabbitmq-plugins 启用插件

sudo rabbitmq-plugins enable rabbitmq_mqtt

重新启动 rabbitmq 服务器

sudo /etc/init.d/rabbitmq-server restart 

代理日志文件现在应该包含一个新行,指示它已准备好接受 MQTT 连接

=INFO REPORT==== 12-Sep-2012::14:21:26 ===
started MQTT TCP Listener on [::]:1883

在大多数情况下,默认配置选项应该可以正常工作。所有配置选项的说明都包含在 自述文件 中。如果您想设置 SSL 或定义不同的交换机以方便 联合,则需要提供其他配置。

您现在可以尝试执行 包含的测试(基于 Java Paho 客户端库)或您自己的 MQTT 应用程序。

请参阅 联系 页面,了解如何提供反馈的详细信息。

© 2024 RabbitMQ. All rights reserved.