如何在直接交换机上向所有订户广播相同的队列名称/路由密钥

时间:2010-06-30 17:55:28

标签: python rabbitmq

考虑一组N多个订户,所有订户都使用相同的队列名称和路由密钥值连接到直接交换。这将创建一个负载平衡系统,其中入站消息将循环发送给其中一个订户。这对于处理横向扩展问题非常有效,因为可以在负载增加时添加更多订户,以后可以在必要时撤消。

现在考虑能够向该层中的所有订户发送消息的要求,而不知道有多少(例如“重置您的状态”或“立即关闭”管理消息)。在rabbitmq有什么办法吗?如果这不可能,有更好的方法吗?

我的环境是使用amqplib的Python。

1 个答案:

答案 0 :(得分:2)

如果我理解正确,这是您的设置:

  • 你有一个制作人发布直接交换;
  • 你有一个绑定到该交换的队列;
  • 你有很多订阅者,都是从上面的队列中消费的。

这非常适合向任意订阅者发送消息(从而实现排序负载平衡),但您希望能够向所有订阅者发送一些消息。

您可以通过扇出交换和每个订户的额外队列来执行此操作:

  • 您的制作人将系统范围的消息发布到扇出交换;
  • 每个绑定到该交换的订户都有一个队列;
  • 每个订户首先尝试从此队列中消费;如果它没有成功,它会尝试使用您当前使用的公共队列。