是否可以正常停止ListenerContainer
及其相关的Consumers
。
我要实现的目标。
ListenerContainer
。我可以使用ListenerContainers
停止consumer.stop()
,但是长期运行的使用者不会成功完成,并且处理后的消息也不会得到确认,因此一旦ListenerContainer已恢复。
输出
Waiting for workers to finish.
Workers not finished.
Closing channel for unresponsive consumer: Consumer@6d229b1c
邮件已处理,但未确认。
我也许可以使用setForceCloseChannel(false)
实现正常关机,但是是否可以验证被取消的使用者是否已完成? SimpleMessageListenerContainer.doShutDown()具有本地范围的列表“ canceledConsumers”。
答案 0 :(得分:1)
增加关闭超时时间。
请参见Message Listener Container Configuration。
shutdownTimeout
当容器关闭时(例如,如果关闭了其封闭的ApplicationContext),它将等待处理运行中的消息直至达到此限制。默认为五秒钟。
/**
* The time to wait for workers in milliseconds after the container is stopped. If any
* workers are active when the shutdown signal comes they will be allowed to finish
* processing as long as they can finish within this timeout. Defaults
* to 5 seconds.
* @param shutdownTimeout the shutdown timeout to set
*/
public void setShutdownTimeout(long shutdownTimeout) {