我正在使用已订阅3个不同队列的SimpleMessageListenerContainer。 SimpleMessageListenerContainer已配置了具有指数回退策略的RetryOperationsInterceptor。
我的SimpleMessageListenerContainer已配置为:
container.addQueueNames("news.politics","news.science","news.tech");
container.setMaxConcurrentConsumers(10);
container.setAdviceChain(new Advice[]{retryInterceptor});
如果来自三个已使用队列之一的消息进入错误状态并导致异常,则使用方将按预期触发策略的指数倒退。但是,我注意到使用方停止循环处理其他2个队列中的消息。我在想,因为使用者设置为“ MaxConcurrentConsumer”为10,所以使用者将开始产生使用者线程并循环其余队列。
答案 0 :(得分:1)
增加消费者的算法是有限的;如果重试拦截器挂起使用者线程,则将阻止启动新使用者。
增大concurrentConsumers
(至少3)或切换到DirectMessageListenerContainer
。
参见choosing a container。