问题
I am trying to get SpringCloud AWS SQS working with a custom SimpleMessageListenerContainerFactory
so i can set timeouts and maxnumber of messages. Without the custom SimpleMessageListenerContainerFactory
methods that are annotated with the @SqsListener
nicely pickup messages that are in SQS. But when i try to configure a custom SimpleMessageListenerContainerFactory
the annotation stops working.
@Bean
public SimpleMessageListenerContainerFactory simpleMessageListenerContainerFactory(AmazonSQSAsync amazonSqs) {
SimpleMessageListenerContainerFactory factory = new SimpleMessageListenerContainerFactory();
factory.setAmazonSqs(amazonSqs);
factory.setAutoStartup(true);
factory.setMaxNumberOfMessages(10);
factory.setWaitTimeOut(2000);
return factory;
}
How can i get the normal @SqsListener behaviour when defining a custom SimpleMessageListenerContainerFactory?
@Component
public class SqsMessageConsumer {
@SqsListener("incoming-data")
private void doSomething(String payload) {
System.out.println("data = " + payload);
}
}
回答1:
Not sure what you have missed but there is a test exactly for such a use-case:
@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;
}
}
So, @EnaqbleSqs
is still here and SqsConfiguration
is @Autowired
with your custom SimpleMessageListenerContainerFactory
@Bean
.
来源:https://stackoverflow.com/questions/40092518/how-to-configure-custom-spring-cloud-aws-simplemessagelistenercontainerfactory-s