Java 如何优雅地关闭Spring JMS MessageListenerAdapter

Java 如何优雅地关闭Spring JMS MessageListenerAdapter,java,spring,jms,Java,Spring,Jms,我有一个消息处理程序,它使用来自JMS队列的消息,并将结果发送到另一个JMS队列。消息处理程序位于Spring DefaultMessageListenerContainer中。 当容器关闭时,我希望它完成处理任何已经使用的请求并发送结果。同时,它不应该再使用来自请求队列的任何新消息 现在,由于没有特殊的关闭规定safe ApplicationContext.registerShutdownHook(),容器会等待任何挂起的ListerMethod调用返回,但它不会将结果发送到响应队列 确保运行

我有一个消息处理程序,它使用来自JMS队列的消息,并将结果发送到另一个JMS队列。消息处理程序位于Spring DefaultMessageListenerContainer中。 当容器关闭时,我希望它完成处理任何已经使用的请求并发送结果。同时,它不应该再使用来自请求队列的任何新消息

现在,由于没有特殊的关闭规定safe ApplicationContext.registerShutdownHook(),容器会等待任何挂起的ListerMethod调用返回,但它不会将结果发送到响应队列


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

我认为应该通过
DisposableBean
接口或
@PreDestroy
注释来实现。IMHO的关键不是让Spring关闭DMLC,而是让一个组件来完成这项工作,该组件知道当前“系统内部”的消息。这样,在等待当前处理的消息完成时,您将停止侦听新消息

使用bean声明上的
依赖于
属性,您还可以定义要关闭的bean的顺序。红色更多关于这一点