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

Mar*_*rco 6 amazon-sqs spring-boot spring-cloud

我正在尝试让 SpringCloud AWS SQS 与自定义一起工作,SimpleMessageListenerContainerFactory以便我可以设置超时和最大消息数。没有使用SQS 中SimpleMessageListenerContainerFactory@SqsListener良好拾取消息注释的自定义方法。但是当我尝试配置自定义时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;
}
Run Code Online (Sandbox Code Playgroud)

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

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

Art*_*lan 7

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

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

}
Run Code Online (Sandbox Code Playgroud)

所以,@EnaqbleSqs仍然在这里,SqsConfiguration@Autowired与您的自定义SimpleMessageListenerContainerFactory @Bean.