rabbit:listener-container属性是否共享?

时间:2015-10-07 06:46:00

标签: java spring rabbitmq amqp spring-amqp

<rabbit:listener-container connection-factory="connectionFactory" concurrency="5" error-handler="genericErrorHandler" prefetch="10">
    <rabbit:listener ref="SmsListener" method="listen" queue-names="smsQueue" />
    <rabbit:listener ref="TestListener" method="listen" queue-names="testQueue" />
    <rabbit:listener ref="VaultListener" method="listen" queue-names="vaultQueue" />
    <rabbit:listener ref="AggregatedDataListener" method="listen" queue-names="AggregatedHourlyQueue" />
</rabbit:listener-container>

通过上面的配置,我想知道容器的属性(例如并发)是否在所有侦听器之间共享,或者每个侦听器是否都有自己的容器,<rabbit:listener-container />只是命名空间(正如本answer)中指出的那样?

此外,由于每个线程有一个通道,这是否意味着当通道忙于消耗来自一个队列的消息时,共享容器的另一个队列会堆积消息并在通道上等待?

此外,我想知道定义侦听器的更好方法:

  1. 每个监听器都应该放在自己的容器中。

  2. 监听器可以放在同一个容器中,如上面的代码片段所示。

1 个答案:

答案 0 :(得分:0)

正如您引用的问题所解释的那样,每个<listener/>元素都有自己的容器,<listener-container/>外部元素只是方便节省必须在每个侦听器上指定其属性。在线程在容器之间共享的意义上,它们不是“共享的”。

在这种情况下,每个容器有5个线程;在运行时各个容器之间没有关系。

  1. 将每个侦听器放在一个单独的容器元素中,在运行时与现在没有区别。
  2. 虽然您可以为每个侦听器指定多个队列,但是在容器中无法使用多个“侦听器”,在这种情况下,线程确实在这些队列之间共享。