我有一个消息处理程序,它使用 JMS 队列并将结果发送到另一个 JMS 队列。消息处理程序位于 Spring DefaultMessageListenerContainer 中。 当容器关闭时,我希望它完成处理它已经消耗的所有请求并发送结果。同时,它不应再使用请求队列中的任何新消息。
现在,在没有安全 ApplicationContext.registerShutdownHook() 的特殊关闭规定的情况下,容器等待任何挂起的 listernerMethod 调用返回,但它不会将结果发送到响应队列。
确保将运行的处理程序产生的响应发送到响应队列的适当方法是什么?
最佳答案
我认为要走的路必须通过 DisposableBean
接口(interface)或 @PreDestroy
注释来引导。恕我直言,关键是不要让 Spring 关闭 DMLC,而是由一个了解当前“系统内部”消息的组件来完成。这样您就可以在等待当前处理的消息完成时停止收听新消息。
在 bean 声明中使用 depends-on
属性,您还可以定义要关闭的 bean 的顺序。 Spring reference documentation 中的红色更多内容.
关于java - 如何优雅地关闭 Spring JMS MessageListenerAdapter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1028025/