我有一个消息处理程序,它从JMS队列中消耗并将结果发送到另一个JMS队列。消息处理程序位于Spring DefaultMessageListenerContainer中。 当容器关闭时,我希望它完成处理它已经消耗的任何请求并发送结果。同时,它不应再使用来自请求队列的任何新消息。
现在,由于没有特殊的关闭条款安全ApplicationContext.registerShutdownHook(),容器会等待任何挂起的listernerMethod调用返回,但它不会将结果发送到响应队列。
确保将运行处理程序生成的响应发送到响应队列的适当方法是什么?
答案 0 :(得分:2)
我认为要走的路必须通过DisposableBean
界面或@PreDestroy
注释引导。关键是IMHO不是让Spring关闭DMLC,而是让一个知道当前“系统内部”消息的组件完成。这样,您可以在等待当前已处理的消息完成时停止侦听新消息。
在bean声明中使用depends-on
属性,您还可以定义要关闭的bean的顺序。在Spring reference documentation中更多关于此问题。