MQTT 适配器
我为 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 消息,该消息仅在客户端意外断开连接时(例如,由于网络故障)发布。
持久会话
客户端可以使用持久(或非干净)会话来确保它们接收在断开连接期间发布的 PTTP 消息。
默认登录
可以可选地配置默认身份验证详细信息,以便在连接的 MQTT 客户端未提供登录详细信息时,MQTT 适配器可以作为默认用户向 RabbitMQ 代理进行身份验证。
扩展功能
虽然没有明确列出,但所有核心代理功能都可供 MQTT 客户端使用。
MQTT 订阅通配符受到限制,因为它们只能作为后缀出现。AMQP 主题不受此限制,因此通配符可以出现在任何位置。MQTT 适配器实现了更灵活的 AMQP 模式,但具有 MQTT 语法。
MQTT 规范未提及 SSL 或 SSL 与身份验证之间的任何交互。MQTT 适配器现在包含 SSL 功能,未来有可能将证书与身份验证集成。
RabbitMQ 的联合可以通过联合 MQTT 适配器发布到的交换器来实现 MQTT 的“桥接”概念。
未来功能
AMQP 0-9-1 未定义消息传递的“一次且仅一次”语义。因此,MQTT 适配器不支持以 QoS 2(一次且仅一次)级别发布消息,或与客户端交换 PUBREC、PUBREL 或 PUBCOMP 消息。
“保留消息”是 MQTT 的一项功能,其中代理会保留标记的消息并将其传递给未来的订阅客户端。例如,在传感器读数的 PTT P 主题中,保留消息允许客户端在无需等待下一个读数的情况下接收最后一个读数。默认情况下,AMQP 0-9-1 交换器不保留任何消息状态。因此,MQTT 适配器不会尝试遵守“保留”标志,该标志将被静默忽略。
在这些领域,我们特别希望获得社区的反馈。通过这些功能增强核心代理,不仅可以为 MQTT 客户端,还可以为(扩展的)AMQP 和其他客户端提供服务,前提是需求足够。
与其他 MQTT 实现的互操作性
在限制操作到支持的功能时,MQTT 适配器已成功与以下产品的 MQTT 客户端进行了测试
- Really Small Message Broker
- Mosquitto
- Paho
- WebSphere MQ
与其他协议的互操作性
MQTT 适配器使用一个可配置的交换器进行发布,订阅被实现为 AMQP 绑定。结合使用,这允许与知道交换器名称或 MQTT 客户端使用的 PTT P 的任何客户端进行互操作。
安装
首先,请确保您已安装 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 应用程序。
有关如何提供反馈的详细信息,请参阅联系页面。