【问题标题】:How to broadcast to ALL subscribers w/identical queue name/routing key vals on a direct exchange如何在直接交换中向所有具有相同队列名称/路由密钥值的订阅者广播
【发布时间】:2010-06-30 17:55:28
【问题描述】:

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

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

我的环境是使用 amqplib 的 Python。

【问题讨论】:

    标签: python rabbitmq


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 感谢您的回答,您的理解完全正确。我有一个新手式的后续问题(抱歉):您如何尝试从多个队列中消费?
    猜你喜欢
    • 1970-01-01
    • 2019-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-26
    相关资源
    最近更新 更多