如何配置自定义 Spring 云 AWS SimpleMessageListenerContainerFactory 以便它继续与 @SqsListener 一起工作

How to configure custom Spring Cloud AWS SimpleMessageListenerContainerFactory so it keeps working with @SqsListener

我正在尝试让 SpringCloud AWS SQS 使用自定义 SimpleMessageListenerContainerFactory 以便我可以设置超时和最大消息数。没有用 SQS 中的 @SqsListener 很好地拾取消息注释的自定义 SimpleMessageListenerContainerFactory 方法。但是当我尝试配置自定义 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;
}

如何在定义自定义 SimpleMessageListenerContainerFactory 时获得正常的 @SqsListener 行为?

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

不确定您错过了什么,但是有一个针对此类用例的测试:

@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