0

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

现在考虑能够在不知道有多少订阅者的情况下向该层中的所有订阅者发送消息的要求(例如“重置您的状态”或“请立即关闭”管理消息)。有没有办法在rabbitmq中做到这一点?如果这不可能,有更好的方法吗?

我的环境是使用 amqplib 的 Python。

4

1 回答 1

2

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

  • 你有一个生产者发布到直接交易所;
  • 您有一个绑定到该交易所的队列;
  • 你有很多订阅者,都从上面的队列中消费。

这非常适合向任意订阅者发送消息(因此是负载平衡),但您希望能够向所有订阅者发送一些消息。

您可以通过扇出交换和每个订阅者的额外队列来做到这一点:

  • 您的生产者将系统范围的消息发布到扇出交换;
  • 每个绑定到该交换的订阅者都有一个队列;
  • 每个订阅者首先尝试从这个队列中消费;如果不成功,它会尝试从您当前使用的公共队列中消费。
于 2010-07-01T09:48:28.510 回答