要求: 1)我需要通过Java Application获取存储在Mongo DB中的数据并使用主题交换&绑定密钥,在RabbitMQ上创建了3个队列。到目前为止,我已经实现了一切。
问题从第2点开始。
2)当所有3个队列中的多个消费者都可以使用这些消息时。但是当第一个消费者消费来自3个队列的消息时,其他消费者将无法使用它。如何使消息高度可供多个消费者使用。
有没有办法实现这一目标,或者此要求是否有任何替代解决方案。
答案 0 :(得分: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"
可以帮助我避免队列的额外消息。
HTH