问题描述
我有一个没有重试的 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 (将#修改为@)