You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RabbitMQ MQTT插件问题:发送的消息未出现在绑定队列中

问题排查与解决方案:MQTT消息入队失败但速率图上升

以下是针对该问题的具体排查步骤和解决方法:

  • 检查队列绑定与消息投递的匹配性

    • 确认发布者的QoS级别:若使用QoS 0,且订阅者未提前在线,RabbitMQ MQTT插件默认不会将消息留存到绑定队列。需开启消息留存(发布时设置retain=True)或队列持久化(创建队列时勾选Durable)。
    • 验证路由键匹配:amq.topic是通配符交换机,确保队列绑定的路由键my/routing/key与发布者使用的主题完全一致,避免使用通配符导致不匹配。
    • 排查队列排他性:若创建队列时设置了exclusive=true,仅创建该队列的连接可访问,HAProxy轮询到其他节点的订阅者连接将无法读取队列消息,表现为队列空。需改为非排他队列。
  • 解决HAProxy轮询的节点一致性问题

    • 若myqueue未配置为镜像队列,发布者连接的节点会存储消息,而订阅者被转发到其他节点时,该节点无队列副本,自然读取不到消息。需将队列设置为镜像队列:
      1. 进入RabbitMQ管理面板的队列详情页
      2. 配置镜像策略,设置ha-mode=all(同步到所有节点)或对应节点组模式
      3. 重启队列或节点使配置生效
  • 验证MQTT插件的交换机配置

    • 确认MQTT插件默认使用amq.topic作为转发交换机,执行命令查看配置:
      rabbitmqctl eval 'application:get_env(rabbitmq_mqtt, exchange).'
      
      若返回值不是{ok, <<"amq.topic">>},需修改rabbitmq.conf添加:
      mqtt.exchange = amq.topic
      
      之后重启所有RabbitMQ节点。
  • 检查订阅者的订阅逻辑

    • 确认订阅者订阅的主题是my/routing/key,无拼写错误。
    • 匹配发布者与订阅者的QoS级别:若发布者用QoS 1,订阅者用QoS 0,可能因消息确认机制不匹配导致消息被丢弃。
    • 确保订阅者在发布者发送消息前完成订阅,QoS 0消息不会为离线订阅者留存。
  • 排查死信队列的消息流转

    • 查看myqueue是否配置了死信交换机,若消息因队列满、过期等原因被拒收,会被转发到死信队列。可在RabbitMQ管理面板的死信队列中检查是否存在目标消息。

内容的提问来源于stack exchange,提问作者Francesco Carli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 19:33:11