Spring amqp 停止rabbitMQ应用程序(Ctrl-C)

Spring amqp 停止rabbitMQ应用程序(Ctrl-C),spring-amqp,Spring Amqp,我试图找出在RabbitMQ应用程序被Ctrl-C或正常关机等中断中断时,安全停止RabbitMQ应用程序的正确方法 我有一个ApplicationContext.close(带有一个注册的钩子)就足够了吗?它将隐式地处理从ConnectionFactory到Listeneres的完全正常关闭 我试图实现一些博客中提到的仅针对侦听器的destroy 当我有这样的配置时 <rabbit:listener-container connection-factory="connectionFact

我试图找出在RabbitMQ应用程序被Ctrl-C或正常关机等中断中断时,安全停止RabbitMQ应用程序的正确方法

我有一个ApplicationContext.close(带有一个注册的钩子)就足够了吗?它将隐式地处理从ConnectionFactory到Listeneres的完全正常关闭

我试图实现一些博客中提到的仅针对侦听器的destroy

当我有这样的配置时

<rabbit:listener-container connection-factory="connectionFactory" >

<rabbit:listener  id = "X" ref="onMessageX"    queue-names="Z" />
<rabbit:listener id = "A" ref="onMessageB"    queue-names="A" />
<rabbit:listener id= "C" ref="onMessageC"    queue-names="C" />

</rabbit:listener-container> 

当我试着

SimpleMessageListenerContainer容器=context.getBean(SimpleMessageListenerContainer.class)

我最终得到了3个容器bean,当我期望得到一个容器bean时,每个侦听器都变成了一个容器

在使用getBeansOfType进行映射和迭代之后,我能够关闭每个使用停止。如果您将其保存在destroy中,并且applicationContext.close发生,则会发生关机


我是不是在做一些太复杂和愚蠢的事情?如果我们需要从连接工厂开始停止,那么需要停止的内容和所有内容。

您对
的观察完全正确。目标
MessageListenerContainer
s的数量与指定的
子元素的数量相同


当发生
Ctrl-C
时,正常的
ApplicationContext.close()
应该能够让您优雅地停止所有容器。

您对
的观察完全正确。目标
MessageListenerContainer
s的数量与指定的
子元素的数量相同

当发生
Ctrl-C
时,正常的
ApplicationContext.close()
应该可以正常停止所有容器