gpt4 book ai didi

java - 如何优雅地停止使用 @RabbitListener 消费消息

转载 作者:行者123 更新时间:2023-11-30 01:51:08 24 4
gpt4 key购买 nike

有没有办法优雅地停止ListenerContainer及其关联的Consumers

我想要实现的目标。

  1. 停止消费消息。
  2. 优雅地停止ListenerContainer
  3. 等待长时间运行的消费者,并在完成时确认。

我可以使用 consumer.stop() 停止 ListenerContainers,但是 Activity 的长时间运行的消费者将无法成功完成,并且已处理的消息也不会被执行。已确认,因此一旦 ListenerContainer 恢复,将再次处理。

输出

Waiting for workers to finish.
Workers not finished.
Closing channel for unresponsive consumer: Consumer@6d229b1c

消息已处理,但未确认。

我也许可以使用setForceCloseChannel(false)实现正常关闭,但是是否可以验证取消的消费者是否已完成? SimpleMessageListenerContainer.doShutDown() 有一个本地范围列表“canceledConsumers”。

最佳答案

增加关闭超时时间。

参见Message Listener Container Configuration .

shutdownTimeout

When a container shuts down (for example, if its enclosing ApplicationContext is closed), it waits for in-flight messages to be processed up to this limit. Defaults to five seconds.

/**
* 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) {

关于java - 如何优雅地停止使用 @RabbitListener 消费消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55991826/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com