4

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

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

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

4

1 回答 1

2

我认为要走的路必须通过DisposableBean接口或@PreDestroy注释来引导。恕我直言,关键是不要让 Spring 关闭 DMLC,而是让一个知道当前“系统内部”消息的组件完成此操作。这样,您在等待当前处理的消息完成时停止侦听新消息。

使用depends-onbean 声明上的属性,您还可以定义要关闭的 bean 的顺序。在Spring 参考文档中对此进行了更多说明。

于 2009-06-25T14:05:12.553 回答