java如何使用@RabbitListener优雅地停止使用消息
是否有一种方法可以优雅地停止ListenerContainer
及其关联的Consumers
我正在努力实现的目标强>
- 停止使用消息李>
- 优雅地停止
ListenerContainer
李> - 等待长时间运行的消费者,并在完成时确认李>
我可以使用consumer.stop()
停止ListenerContainers
,但是活动的长时间运行的使用者将无法成功完成,并且处理的消息将不会被确认,因此在恢复ListenerContainer后将再次处理
输出
Waiting for workers to finish.
Workers not finished.
Closing channel for unresponsive consumer: Consumer@6d229b1c
消息已处理,但未确认
我可能能够使用setForceCloseChannel(false)
实现优雅的关机,但是否可以验证取消的使用者是否已完成?SimpleMessageListenerContainer。doShutDown()有一个本地范围的列表“canceledConsumers”
# 1 楼答案
增加关机超时时间
见Message Listener Container Configuration
# 2 楼答案
要完成@user634545的最后一条评论,我们必须处理两个属性:
必须调整这些参数才能验证以下内容:
这意味着在收到关闭命令后,使用者应该能够使用并确认每个预取的消息