rabbit:listener-容器属性共享与否?

rabbit:listener-container attributes shared or not?

<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. 可以将监听器封装在与上述代码片段相同的容器中。

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

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

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