RabbitMQ通过MQTT发布消息未进入Exchange绑定队列问题咨询
RabbitMQ MQTT发布消息无法进入绑定队列解决方案
90%以上的该类问题由RabbitMQ MQTT插件的默认主题前缀配置导致:你在管理后台直接发布路由键为test的消息可以匹配绑定规则,但MQTT插件会对所有MQTT客户端发布的主题默认加指定前缀,导致实际消息的路由键和队列绑定的test不匹配。
排查步骤
- 登录RabbitMQ管理后台,进入
amq.topicExchange详情页,开启追踪功能 - 运行Python脚本发布1条测试消息,查看追踪日志中该消息的实际路由键值
修复方案
方案1:调整队列绑定规则
如果追踪到的实际路由键为带前缀的格式(比如默认的mqtt.topic.test),直接将mqtt-messages队列与amq.topic的绑定路由键修改为该实际值即可。方案2:取消MQTT插件默认主题前缀
在RabbitMQ配置文件中添加如下配置,重启RabbitMQ后生效,后续MQTT消息的路由键会和你发布的主题完全一致:mqtt.topic_prefix = ""方案3:校验Python发布端代码
确认发布的MQTT主题无多余字符、层级分隔符和绑定规则匹配,最小可运行示例如下:import paho.mqtt.client as mqtt client = mqtt.Client() # 确认连接的虚拟主机、端口、账号密码和管理后台配置的队列所属资源一致 client.connect("127.0.0.1", 1883, 60) # 发布主题严格和绑定路由键匹配 client.publish("test", payload="测试内容", qos=0) client.disconnect()
内容的提问来源于stack exchange,提问作者ciekals11
相关产品推荐
相关产品推荐

