<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)中指出的那样?
此外,由于每个线程有一个通道,这是否意味着当通道忙于消耗来自一个队列的消息时,共享容器的另一个队列会堆积消息并在通道上等待?
此外,我想知道定义侦听器的更好方法:
每个监听器都应该放在自己的容器中。
或
监听器可以放在同一个容器中,如上面的代码片段所示。
答案 0 :(得分:0)
正如您引用的问题所解释的那样,每个<listener/>
元素都有自己的容器,<listener-container/>
外部元素只是方便节省必须在每个侦听器上指定其属性。在线程在容器之间共享的意义上,它们不是“共享的”。
在这种情况下,每个容器有5个线程;在运行时各个容器之间没有关系。