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

How to configure RabbitMQ in XML file to have 1) listener listening from multiple queues 2) 2 listeners listening to same queue?

我正在尝试了解 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"/>

这是正确的吗? "queues" 属性中的语法是否正确?此外,如果两个侦听器从同一个队列接收,则

<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"/>

这是正确的吗?? "ref" 属性总是引用 bean id???或者它可以指代豆名?? 这有效吗 -

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

请help.Thanks.

Is this correct? Is the syntax correct in "queues" attribute??

是的,没错;单个消费者从 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"/>