如何解决SimpleMessageListenerContainer 调用 stop 后仍然拾取消息
我有一个没有重试的 AWS SQS 队列(MaxReceiveCount 设置为 1)。我已经为此设置了一个 DeadLetter 队列。
我正在使用 spring-cloud-aws-messaging,下面是我的监听器类
@Component
public class MyListener implements ProcessingFinaliser {
private final String sourceQueue;
private final MyProcessor myProcessor;
private SimpleMessageListenerContainer simpleMessageListenerContainer;
public Mylistener(@Value("${my.queue}") String sourceQueue,MyProcessor myProcessor,SimpleMessageListenerContainer simpleMessageListenerContainer) {
this.sourceQueue = sourceQueue;
this.myProcessor = myProcessor;
this.simpleMessageListenerContainer = simpleMessageListenerContainer;
}
@SqsListener("${my.queue}")
public void doWork(String message) throws MyCustomException {
this.processor.processMessage(messge);
}
// Called when shutdown signal is called
@Override
public void finaliseProcessing() {
simpleMessageListenerContainer.stop(sourceQueue);
}
}
SimpleMessageListenerContainerFactory#waitTimeOut 设置为 20 秒
simpleMessageListenerContainerFactory.setWaitTimeOut(20);
我面临的问题是,当 simpleMessageListenerContainer.stop(sourceQueue) 时,doWork 方法仍然选择一条新消息并作为 容器死亡。看起来 SimpleMessageListenerContainer 中的底层 PollingThread 并没有立即停止。
默认情况下,SimpleMessageContainerListener#queueStopTimeout 设置为 10 秒,将其设置为 0 是否正确?
谁能解释一下?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。