我有以下豆:
@Bean
public MessageProducer sqsMessageAdapter() {
SqsMessageDrivenChannelAdapter adapter = new SqsMessageDrivenChannelAdapter(this.amazonSqs, awsConfiguration.myQueue.get());
adapter.setAutoStartup(true);
adapter.setMaxNumberOfMessages(1);
adapter.setSendTimeout(2000);
adapter.setVisibilityTimeout(200);
adapter.setWaitTimeOut(20);
adapter.setOutputChannel(this.myOutput);
return adapter;
}
更多信息:我正在尝试找到一种停止/启动轮询命令的方法,我正在使用没有 xml 的注释来执行此操作。
目前我正在使用SqsMessageDrivenChannelAdapter
and 调用 stop 方法,然后在我想重新启动通道适配器时调用 start 。我遇到的问题是,无论超时设置如何,都会在 stop 方法中引发超时异常。这发生在future.get()
通话中(第 197 行SimpleMessageListenerContainer
)我认为这导致 start 不起作用。Start 不会抛出任何异常,但 poller 不会接收到任何新消息
更新:
启动和停止命令似乎工作正常。问题似乎是我无法设置属性:
public void setQueueStopTimeout(long queueStopTimeout) {
this.queueStopTimeout = queueStopTimeout;
}
如果没有这个SimpleMessageListenerContainer.java
,SqsMessageDrivenChannelAdapter.java
我会遇到超时,因为默认值不够长。