假设您有多个生产者和一个消费者想要接收来自所有可用发布者的持久消息。
生产者以不同的速度工作。假设系统 A 产生 10 个请求/秒,系统 B 产生 1 个请求/秒。因此,如果您使用唯一的队列,您将处理来自 A 的 10 条消息,然后处理来自 B 的 1 条消息。
但是,如果您想平衡负载并处理来自 A 的一条消息,然后处理来自 B 的一条消息等呢?从多个队列消费不是一个好的选择,因为在这种情况下我们不能使用通配符绑定。
更新:
每个生产者排队似乎是最好的方法。生产者不知道他们不断变化的速度。每个消费者拥有一个队列,我可以订阅一个主题并接收来自所有可用发布者的消息。但是每个生产者都有一个队列,我需要自己编写逻辑:
- 通过管理插件获取所有可用队列(AMQP 不允许列出队列)。
- 按队列名称过滤。
- 实施循环策略。
- 实施通知机制以订阅随时可能出现的新发布者。
- 当发布者消失并且客户端读取所有消息时删除不必要的队列。
好吧,这看起来很简单,但我认为代理可以提供所有这些功能而无需任何编码。如果有一个队列,我只创建一个持久队列,将其绑定到主题交换,然后启动任意数量的发布者向主题发送消息。这个选项几乎是开箱即用的。