如何正常关闭春JMS的MessageListenerAdapter(How to gracefull

2019-09-16 16:33发布

我有一个消息处理器,它从一个JMS队列消耗并且将结果发送到另一个JMS队列。 消息处理程序住在春季使用DefaultMessageListenerContainer。 当容器关闭,我想它完成处理,这已经消耗任何请求和发送出来的结果。 与此同时,应该不再消耗从请求队列中的任何新的消息。

眼下,没有特殊停止规定安全ApplicationContext.registerShutdownHook(),对于任何未决listernerMethod调用容器等待返回,但不发送出来的结果,以响应队列。

什么将是确保通过运行处理程序生成的响应被发送到响应队列相应的处理方法?

Answer 1:

我觉得要走的路必须通过引领DisposableBean接口或@PreDestroy注解。 最关键的事情恕我直言,是不要让春天关闭DMLC而是让这个被认为是知道消息的当前“系统内部”组件来完成。 这样,您停止收听新邮件,同时等待当前处理连线消息被完成。

使用depends-on的bean声明属性还可以定义bean的顺序被关闭。 红更多关于这个在Spring参考文档 。



文章来源: How to gracefully shut down a Spring JMS MessageListenerAdapter
标签: java spring jms