java - 如何优雅地关闭 Spring JMS MessageListenerAdapter

标签 java spring jms

我有一个消息处理程序,它使用 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/

相关文章:

java - 加载不同的 map

java - Spring Boot 部署看不到 .class 文件

java - Spring 的@Scheduled 注解是如何工作的?

grails - 在运行时更改ActiveMQConnectionFactory brokerURL在grails中

java - JAX-RS 安全性 - 主体不持久

java - vector 似乎不包含正确的数据

jms - FOSRestbundle、JMS Serializer 和 SonataMediaBundle 返回图像的公共(public) url

testing - Arquillian,(嵌入式)Glassfish 和 JMS : How to test a worker?

java - 如何增加intellij idea 2017.1.3中的堆大小?

Java Spring 下拉填充