跳到主要内容

MQTT 适配器

·5 分钟阅读
Emile Joubert

我为 RabbitMQ 编写了一个插件,增加了对 MQTT 3.1 协议的支持。MQ 遥测传输 (MQTT) 是一种轻量级的发布/订阅协议,专为资源受限的设备和带宽有限的情况而设计,使其非常适合传感器和移动设备。该实现是一个协议适配器插件,允许 MQTT 客户端与实现其他协议的客户端同时连接到 RabbitMQ Broker。我们鼓励需要将低开销协议与强大、可扩展且具有高可靠性和企业功能的 Broker 相结合的项目考虑此选项。

支持的功能

QoS 0 和 QoS 1

MQTT 适配器支持 QoS 0(最多一次)和 QoS 1(至少一次)语义。在 MQTT 中,QoS 关系到传输保证和持久性 - 该插件两者都遵守。虽然允许客户端请求 QoS 2 订阅,但适配器只会授予高达 QoS 1 的订阅。

遗嘱和遗愿 (LWT)

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

粘性会话

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

默认登录

可以有选择地配置默认身份验证详细信息,以便在连接的 MQTT 客户端未提供登录详细信息的情况下,MQTT 适配器以默认用户身份向 RabbitMQ Broker 进行身份验证。

扩展功能

虽然未明确列举,但所有核心 Broker 功能都可供 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 的一项功能,其中 Broker 保留标记的消息并将它们传递给未来的订阅客户端。例如,在传感器读数的主题中,保留消息允许客户端接收上次读数,而无需等待下一次读数。默认情况下,AMQP 0-9-1 交换机不保留任何消息状态。因此,MQTT 适配器不尝试遵守“保留”标志,该标志将被静默忽略。

在这些领域,我们尤其有兴趣获得社区的反馈。不仅对于 MQTT 客户端,而且对于(扩展的)AMQP 和其他客户端,增强具有这些功能的核心 Broker 也具有潜力 - 前提是有足够的需求。

与其他 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 

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

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

默认配置选项在大多数情况下应该可以正常工作。所有配置选项的描述都包含在 readme 中。如果您希望设置 SSL,或定义不同的交换机以方便 联合,则需要提供进一步的配置。

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

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

© . All rights reserved.