有奖捉虫:行业应用 & 管理与支持文档专题 HOT
文档中心 > 最佳实践 > 消息队列 RabbitMQ 版 > RabbitMQ 支持 MQTT 协议使用说明

方案介绍

MQTT 是目前广泛使用的物联网协议,RabbitMQ 是基于 AMQP 0.9.1 协议实现的广泛使用的开源消息队列产品,RabbitMQ 以插件的形式支持了 MQTT 协议,可以在 RabbitMQ 集群上方便的支持 MQTT 协议,实现对物联网等业务场景的支持。
社区参考文档:
1. RabbitMQ 3.11 之前版本插件支持 MQTT 协议: MQTT Plugin — RabbitMQ?
2. RabbitMQ 3.12 版本原生支持 MQTT 协议: Serving Millions of Clients with Native MQTT | RabbitMQ - Blog?

操作步骤

步骤1:购买云上或自建RabbitMQ集群

云上直接购买 RabbitMQ 集群,立即选购
或者自己搭建 RabbitMQ 集群,详细参见: Downloading and Installing RabbitMQ — RabbitMQ

步骤2:开启MQTT插件

通过在集群节点执行以下命令开启MQTT插件:
sudo rabbitmq-plugins enable rabbitmq_mqtt
腾讯云的 RabbitMQ 插件管理功能正在开发中,目前可以通过提交工单来开启 MQTT 插件和打通网络工作。
开启 mqtt 插件后,可以在管控台看到新增的1883端口:
?

步骤3:验证 MQTT 的可用性

可以下载常用的 mqttx(MQTTX:全功能 MQTT 客户端工具)客户端工具来验证一下:
1. 新建连接,填写地址和端口。用户名和密码选用 RabbitMQ 的用户名和密码即可。
?
2. 新建订阅,订阅 testtopic/# 主题的消息。
?
3. 检查 RabbitMQ 的队列情况,可以看到每个订阅会在 RabbitMQ 新增一个队列。
?
4. 收发消息验证,发送 testtopic/123456消息,立即可以通过订阅收到消息。
?
5. 查看 RabbitMQ 监控,可以看到刚才的队列有一次收发消息的监控。
?
6. 验证 MQTT 上行消息和 RabbitMQ 的消息互通性,MQTT 发送消息也可以路由到普通队列,由 RabbitMQ 下游应用来消费这个消息。
?
?
7. 验证 RabbitMQ 和 MQTT 下行消息的互通性,可以 RabbitMQ 发送消息,MQTT 订阅到消息。
?
?
8. 验证总结。通过以上验证可以确认,RabbitMQ 的 MQTT 插件,可以支持正常的 MQTT 消息收发,也可以支持 MQTT 上行消息到应用,也可以支持应用发送 MQTT 消息下行消息到订阅端,并且有完善的监控。

实现原理

3.11 版本之前的实现原理,通过 MQTT 消息转为 AMQP 协议,实现 MQTT 的消息收发。
?
3.12 之后版本的实现原理,不再经过 AMQP 协议转换,理论上有更好的性能。
?

注意事项

我们推荐使用现在的稳定版本3.8.x 或3.11.x等稳定版本,没有已知 Bug。
因为3.12.x版本是新发布的版本,MQTT 实现有重新实现刚发布初始版本,我们在验证过程中,发现监控不准,RabbitMQ 互通偶尔异常等问题。因此不推荐生产环境使用3.12版本
目前支持主流的 MQTT v3 和v3.1版本,暂不支持v5版本,RabbitMQ 预计3.13版本才会支持
MQTT 协议的 topic 使用"/"分割 topic, AMQP 协议的 Topic(Routingkey)使用 "."分割 topic,所以在协议转换的时候会自动转换,应用使用的时候要注意这个差别。
不推荐 MQTT 使用匿名连接或“no login credentials”,因为 AMQP 协议会自动转换为默认用户 guest 或 mqtt.default_user,不方便做权限管控。
关于订阅持久性,注意 MQTT 和 AMQP 队列持久性的映射。
Transient clients that use transient (non-persistent) messages
Stateful clients that use durable subscriptions (non-clean sessions, QoS1)优先使用镜像队列,不要使用 Quorum Queues 特性,因为 Quorum 要求至少三节点,并且新特性稳定性待验证,暂不推荐使用。
优先使用镜像队列,不要使用 Quorum Queues 特性,因为 Quorum 要求至少三节点,并且新特性稳定性待验证,暂不推荐使用。


http://www.vxiaotou.com