我有以下豆子:
@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
并调用 stop 方法,然后在我想重新启动通道适配器时启动。我遇到的问题是,无论超时设置如何,都会在 stop 方法中抛出超时异常。这发生在future.get()
电话(SimpleMessageListenerContainer
的第 197 行)上,我认为这导致启动不起作用。Start 不会引发任何异常,但轮询器不会选取任何新消息
更新:
启动和停止命令似乎工作正常。问题似乎是我无法设置属性:
public void setQueueStopTimeout(long queueStopTimeout) {
this.queueStopTimeout = queueStopTimeout;
}
这生活在SqsMessageDrivenChannelAdapter.java
的SimpleMessageListenerContainer.java
没有这个,我就会超时,因为默认值不够长。
你的问题不清楚。请考虑将来更具体。
无论如何,让我猜猜,你的意思是那个SqsMessageDrivenChannelAdapter
的start()/stop()
操作.不确定将其注入所需位置并调用这些方法有什么问题。
@Autowired
@Qualifier("sqsMessageAdapter")
private Lifecycle sqsMessageAdapter;