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

时间:2017-03-02 18:36:29

标签: spring-amqp

我试图找出什么是正确的方法来安全地停止RabbitMQ应用程序如果被Ctrl-C或正常关机等中断打断

我有一个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 Container = context.getBean(SimpleMessageListenerContainer.class);

当我预期一个时,我最终获得了3个Container bean,每个侦听器都成了一个容器。

在将getBeansOfType用于MAP并进行迭代后,我能够关闭每个使用停止。如果你将它保存在destroy并且applicationContext.close发生,就会发生关闭。

我是否想在这里做一些过于复杂和愚蠢的事情?如果我们需要从连接工厂停止,需要停止什么和所有。

1 个答案:

答案 0 :(得分:0)

您对<rabbit:listener-container>的观察是完全正确的。您的目标MessageListenerContainer与指定<rabbit:listener>个子元素一样多。

Ctrl-C发生时,正常的ApplicationContext.close()应该可以帮助您优雅地停止所有容器。