spring-integration-aws SqsMessageDrivenChannelAdapter 控制总线

spring-integration-aws SqsMessageDrivenChannelAdapter control bus

我有以下 bean:

@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;
}

更多信息: 我正在尝试找到一种 stopping/starting 命令轮询的方法,我正在使用没有 xml 的注释来执行此操作。

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

更新:

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

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

这与 SqsMessageDrivenChannelAdapter.java 中的 SimpleMessageListenerContainer.java 一起生活 如果没有这个,我会超时,因为默认时间不够长。

你的问题不清楚。请以后考虑更具体一些。

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

@Autowired
@Qualifier("sqsMessageAdapter")
private Lifecycle sqsMessageAdapter;