如何在XML文件中配置RabbitMQ以使1)侦听器从多个队列中侦听2)2个​​侦听器侦听同一队列?

时间:2018-03-05 14:32:06

标签: java xml spring-amqp spring-rabbit

我试图了解Spring RabbitMQ XML配置。到目前为止,我从未遇到过侦听器列表(订阅)到多个队列的xml配置。同样明智的是,我从未找到过代码,其中2个侦听器在同一个xml文件中订阅了相同的队列。在浏览完XSD文档后,在哪里找到了属性 - " queue-names"是逗号分隔的队列名称列表。所以,我相信xml配置也可以像 -

<rabbit:queue id="springQueue1" name="spring.queue1" auto-delete="true" durable="false"/>

<rabbit:queue id="springQueue2" name="spring.queue1" auto-delete="true" durable="false"/>


<rabbit:listener-container connection-factory="connectionFactory">
    <rabbit:listener queues="springQueue1, springQueue2" ref="messageListener"/>
</rabbit:listener-container>

<bean id="messageListener" class="com.ndpar.spring.rabbitmq.MessageHandler"/>

这是对的吗?语法是否正确&#34;队列&#34;属性??此外,如果两个侦听器从同一队列接收,则

<rabbit:listener-container connection-factory="connectionFactory">
   <rabbit:listener queues="springQueue1" ref="messageListener1"/>
   <rabbit:listener queues="springQueue1" ref="messageListener2"/>
</rabbit:listener-container>
<bean id="messageListener1" class="com.ndpar.spring.rabbitmq.MessageHandler1"/>
<bean id="messageListener2" class="com.ndpar.spring.rabbitmq.MessageHandler2"/>

这是对的吗? &#34;参考&#34;属性总是指bean id ???或者它可以引用bean名称?  这是否有效 -

<rabbit:listener queues="springQueue1" ref="messageListener1, messageListener2"/>

请帮忙。谢谢。

1 个答案:

答案 0 :(得分:2)

  

这是对的吗?语法是否正确&#34;队列&#34;属性??

是的,这是正确的;一个消费者从2个队列消费。

<rabbit:listener-container connection-factory="connectionFactory">
   <rabbit:listener queues="springQueue1" ref="messageListener1"/>
   <rabbit:listener queues="springQueue1" ref="messageListener2"/>
</rabbit:listener-container>

它在功能上与具有concurrency="2"的单个侦听器相同 - 在这种情况下,容器将针对队列创建2个使用者。在您的情况下,我们将获得2个容器,每个容器有一个消费者。

ref必须引用单个bean id。对于普通<bean/> s,nameid的同义词。

这是无效的:

<rabbit:listener queues="springQueue1" ref="messageListener1, messageListener2"/>