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

RabbitMQ发送3条不同路由键消息,仅消费2队列却出现随机消费问题

RabbitMQ 消息随机消费问题解析

核心原因

这是因为同一个队列的消息会被RabbitMQ以轮询(round-robin)策略分发给绑定到该队列的所有消费者,和消费者与交换机的路由键绑定无关。具体逻辑拆解:

  1. 你的order直连交换机,会根据消息的路由键,把order.notify和order.report的消息路由到order_notify队列(因为两个消费者分别给这个队列绑定了对应的路由键,相当于队列同时关联了这两个路由规则);而order.test的消息因为没有对应的队列绑定,会被交换机丢弃。
  2. 一旦消息进入order_notify队列,RabbitMQ就只认队列的消费者列表,默认用轮询方式挨个给消费者发消息——不管这个消费者原本是冲着哪个路由键来的。所以order.notify的消息可能被report.py接收到,order.report的消息也可能被notify.py接收到,看起来就是“随机消费”。

解决办法

最合理的方案是给两个消费者分配独立的队列:

  • 给report.py创建专属队列(比如order_report_queue),将其与order交换机绑定,路由键设为order.report。
  • 给notify.py创建专属队列(比如order_notify_queue),将其与order交换机绑定,路由键设为order.notify。
    这样交换机就会把对应路由键的消息精准投递到各自队列,每个消费者只处理自己队列里的目标消息,不会出现串接的情况。

如果非要共用队列(不推荐,浪费资源),可以在消费端接收到消息后,判断消息的路由键,只处理自己关心的,忽略其他路由键的消息。

内容的提问来源于stack exchange,提问作者DIPESH RISHI

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 08:25:45