首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SimpleMessageListenerContainer关闭超时

SimpleMessageListenerContainer关闭超时
EN

Stack Overflow用户
提问于 2018-01-19 03:08:10
回答 1查看 825关注 0票数 1

我使用的是spring-rabbit 1.7.3.RELEASE.jar

我已经用shutdownTimeout参数在我的xml中定义了一个SimpleMessageListenerContainer。

代码语言:javascript
复制
bean id="aContainer"
class="org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer">
    <property name="connectionFactory" ref="rabbitConnectionFactory" />
    <property name="queueNames" value="aQueue" />
    <property name="adviceChain" ref="retryAdvice" />
    <property name="acknowledgeMode" value="AUTO" />
    <property name="shutdownTimeout" value="900000" />
</bean>

当我的服务关闭时,"aQueue“中仍然有消息,我希望shutdownTimeout会允许处理这些消息。但这似乎并没有发生。

经过进一步的研究,我发现在SimpleMessageListenerContainer中定义的await()方法总是返回true。

代码语言:javascript
复制
this.cancellationLock.await(Long.valueOf(this.shutdownTimeout), TimeUnit.MILLISECONDS); 

我想了解等待的逻辑是如何工作的,它是如何获取锁的,以及在我的端需要哪些额外的配置才能使代码工作。

EN

回答 1

Stack Overflow用户

发布于 2018-01-19 03:19:29

它等待运行中的消费者,即那些忙于处理已经获取但尚未确认的消息的消费者。在关机期间,没有人会从队列中轮询新的消息。

ActiveObjectCounter等待释放所有内部CountDownLatch。这种情况发生在我们:

代码语言:javascript
复制
public void handleShutdownSignal(String consumerTag, ShutdownSignalException sig) {

所以,这可能真的是一个事实,所有的消费者(默认情况下是private volatile int concurrentConsumers = 1;)在shutdownTimeout期间被取消和释放。

但是再说一次:当状态为shutdown时,没有任何主体将轮询来自代理的新消息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48328643

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档