2

我有以下豆:

@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 的注释来执行此操作。

目前我正在使用SqsMessageDrivenChannelAdapterand 调用 stop 方法,然后在我想重新启动通道适配器时调用 start 。我遇到的问题是,无论超时设置如何,都会在 stop 方法中引发超时异常。这发生在future.get()通话中(第 197 行SimpleMessageListenerContainer)我认为这导致 start 不起作用。Start 不会抛出任何异常,但 poller 不会接收到任何新消息

更新:

启动和停止命令似乎工作正常。问题似乎是我无法设置属性:

public void setQueueStopTimeout(long queueStopTimeout) {
    this.queueStopTimeout = queueStopTimeout;
}

如果没有这个SimpleMessageListenerContainer.javaSqsMessageDrivenChannelAdapter.java我会遇到超时,因为默认值不够长。

4

1 回答 1

0

你的问题不清楚。请考虑在未来更具体。

无论如何,让我猜猜,你的意思start()/stop()SqsMessageDrivenChannelAdapter. 不确定将其注入所需位置并调用这些方法有什么问题。

@Autowired
@Qualifier("sqsMessageAdapter")
private Lifecycle sqsMessageAdapter;
于 2016-06-13T16:35:28.900 回答