Spring cloud AWS多个SimpleMessageListenerContainer配置设置

时间:2016-08-17 21:13:53

标签: spring-cloud-aws

我正在尝试实例化多个SimpleMessageListenerContainer并为独立的TaskExecutor队列定义自定义MessageListener,这个设置的原因是我不想创建共享SimpleMessageListenerContainer 1}}其中线程池配置在所有Message Listener队列中共享。

你能提出一个建议吗?我尝试了一些spring-messaging-aws测试用例方法,但似乎没有工作?

@Bean
public SimpleMessageListenerContainerFactory simpleMessageListenerContainerFactory() {
    SimpleMessageListenerContainerFactory msgListenerContainerFactory = new SimpleMessageListenerContainerFactory();
    msgListenerContainerFactory.setAmazonSqs(amazonSQSClient());
    return msgListenerContainerFactory;
}

@Bean
public SimpleMessageListenerContainer uplinkMessageListenerContainer() throws Exception {
    SimpleMessageListenerContainer msgListenerContainer = simpleMessageListenerContainerFactory().createSimpleMessageListenerContainer();
    msgListenerContainer.setAmazonSqs(amazonSQSClient());
    QueueMessageHandler messageHandler = new QueueMessageHandler();
    msgListenerContainer.setMessageHandler(messageHandler);
    StaticApplicationContext applicationContext = new StaticApplicationContext();
    applicationContext.registerSingleton("uplinkMessageListener", UplinkMessageListener.class);

    messageHandler.setApplicationContext(applicationContext);
    msgListenerContainer.setBeanName("testContainerName");
    messageHandler.afterPropertiesSet();
    msgListenerContainer.setMaxNumberOfMessages(maxNumberOfmessages);
    msgListenerContainer.setWaitTimeOut(waitTimeout);
    msgListenerContainer.setBackOffTime(backOfTime);
    msgListenerContainer.setAutoStartup(sqsAutoStartup);
    msgListenerContainer.setVisibilityTimeout(visibilityTimeout);
    msgListenerContainer.setTaskExecutor(createDefaultTaskExecutor("MPSQSUplinkMessageListener", 2, 10));
    msgListenerContainer.afterPropertiesSet();
    msgListenerContainer.start();
    return msgListenerContainer;
}

1 个答案:

答案 0 :(得分:0)

我找不到比使用 Scheduler 创建服务更好的解决方案了。

@Component
public class AmazonService {

  @Scheduled("0 */5 * * * *")
  public void checkSqs() {
     // Check sqs
  }
}

SQS 将通过惰性机制或通过服务中的构造函数进行实例化。