Как настроить пользовательское весеннее облако AWS SimpleMessageListenerContainerFactory, чтобы оно продолжало работать с @SqsListener

#spring-boot #spring-cloud #amazon-sqs

#весенняя загрузка #spring-cloud #amazon-sqs

Вопрос:

Я пытаюсь заставить SpringCloud AWS SQS работать с пользовательским SimpleMessageListenerContainerFactory , чтобы я мог устанавливать тайм-ауты и максимальное количество сообщений. Без пользовательских SimpleMessageListenerContainerFactory методов, которые снабжены аннотациями с сообщениями о @SqsListener приятном получении, которые находятся в SQS. Но когда я пытаюсь настроить пользовательский SimpleMessageListenerContainerFactory , аннотация перестает работать.

 @Bean
public SimpleMessageListenerContainerFactory simpleMessageListenerContainerFactory(AmazonSQSAsync amazonSqs) {
    SimpleMessageListenerContainerFactory factory = new SimpleMessageListenerContainerFactory();
    factory.setAmazonSqs(amazonSqs);
    factory.setAutoStartup(true);
    factory.setMaxNumberOfMessages(10);
    factory.setWaitTimeOut(2000);
    return factory;
}
  

Как я могу получить обычное поведение @SqsListener при определении пользовательского SimpleMessageListenerContainerFactory?

 @Component
public class SqsMessageConsumer {
    @SqsListener("incoming-data")
    private void doSomething(String payload) {
        System.out.println("data = "   payload);
    }
}
  

Ответ №1:

Не уверен, что вы пропустили, но есть тест именно для такого варианта использования:

 @EnableSqs
@Configuration
public static class ConfigurationWithCustomContainerFactory {


    @Bean
    public SimpleMessageListenerContainerFactory simpleMessageListenerContainerFactory() {
        SimpleMessageListenerContainerFactory factory = new SimpleMessageListenerContainerFactory();
        factory.setAmazonSqs(amazonSQS());
        ...
        return factory;
    }

    @Bean
    public AmazonSQSAsync amazonSQS() {
        return AMAZON_SQS;
    }

}
  

Итак, @EnaqbleSqs оно все еще здесь и SqsConfiguration @Autowired с вашим пользовательским SimpleMessageListenerContainerFactory @Bean .

Комментарии:

1. Я нашел проблему. Проблема заключалась в factory.setWaitTimeOut(2000);. Я предположил, что время исчисляется миллисекундами .. 🙂 Спасибо за помощь!!

2. Мне нужно реализовать sqslistener, используя аналогичный подход, который вы внедрили. Я попытался найти в Интернете демонстрационный пример, но не смог. не могли бы вы помочь мне реализовать ваш подход. Это было бы большим подспорьем для меня.