要求:1)我需要通过Java应用程序并使用主题交换和绑定键来获取存储在Mongo DB中的数据,在RabbitMQ上创建了3个队列。到目前为止,我已经实现了一切。
问题从第二点开始。
2) 当消息应该可供来自所有 3 个队列的多个消费者使用时。但是当第一个消费者消费来自 3 个队列的消息时,其他消费者将无法使用它。如何使消息对多个消费者高度可用。
是否有任何方法可以实现这一点,或者这个要求是否有任何替代解决方案。
要求:1)我需要通过Java应用程序并使用主题交换和绑定键来获取存储在Mongo DB中的数据,在RabbitMQ上创建了3个队列。到目前为止,我已经实现了一切。
问题从第二点开始。
2) 当消息应该可供来自所有 3 个队列的多个消费者使用时。但是当第一个消费者消费来自 3 个队列的消息时,其他消费者将无法使用它。如何使消息对多个消费者高度可用。
是否有任何方法可以实现这一点,或者这个要求是否有任何替代解决方案。
您的所有消费者都必须提供他们自己的唯一queue
性并将其绑定到相同的exchange
.
AMQP中没有这样的Topic
抽象,就像 JMS 一样。
即使我们可以通过主题或扇出交换发布消息,消息也会作为单个条目放入队列中,因此只有一个消费者能够从队列中获取它。
我的提议的配置可能如下所示:
<queue id="commandQueue" name="#{node.id}.command"
auto-delete="true"/>
<fanout-exchange name="commandsExchange">
<bindings>
<binding queue="commandQueue"/>
</bindings>
</fanout-exchange>
<amqp:inbound-channel-adapter id="commandConsumer"
queue-names="#{commandQueue.name}"
channel="commandChannel"/>
这样,我所有的应用程序实例都将它们的唯一性queue
(基于node.id
抽象)绑定到相同的commandsExchange
. 并且发布的消息commandsExchange
将被传递到我的所有节点。
auto-delete="true"
如果节点死了,可以帮助我避免队列中的额外消息。
高温高压