我试图找出什么是正确的方法来安全地停止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发生,就会发生关闭。
我是否想在这里做一些过于复杂和愚蠢的事情?如果我们需要从连接工厂停止,需要停止什么和所有。
答案 0 :(得分:0)
您对<rabbit:listener-container>
的观察是完全正确的。您的目标MessageListenerContainer
与指定<rabbit:listener>
个子元素一样多。
当Ctrl-C
发生时,正常的ApplicationContext.close()
应该可以帮助您优雅地停止所有容器。