Мне нужно отправить и получить сообщение SQS, как я это делаю в rabbitmq. Поэтому мне нужно сделать это синхронно. Проблема в том, что если я использую @SqsListener при весенней загрузке, метод никогда не вызывается, если у него есть подпись, отличная от (String s). Любая другая подпись не просто работает, метод не запускается.
Моя конфигурация:
@Bean
public QueueMessagingTemplate queueMessagingTemplate() {
return new QueueMessagingTemplate(amazonSQSAsync());
}
@Bean
public AmazonSQSAsync amazonSQSAsync() {
return AmazonSQSAsyncClientBuilder.standard().withRegion(Regions.US_EAST_1)
.withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials(awsAccessKey, awsSecretKey)))
.build();
}
@Bean
public SimpleMessageListenerContainer simpleMessageListenerContainer() {
SimpleMessageListenerContainer msgListenerContainer = simpleMessageListenerContainerFactory()
.createSimpleMessageListenerContainer();
msgListenerContainer.setMessageHandler(queueMessageHandler());
return msgListenerContainer;
}
@Bean
public SimpleMessageListenerContainerFactory simpleMessageListenerContainerFactory() {
SimpleMessageListenerContainerFactory msgListenerContainerFactory = new SimpleMessageListenerContainerFactory();
msgListenerContainerFactory.setAmazonSqs(amazonSQSAsync());
return msgListenerContainerFactory;
}
@Bean
public QueueMessageHandler queueMessageHandler() {
QueueMessageHandlerFactory queueMsgHandlerFactory = new QueueMessageHandlerFactory();
queueMsgHandlerFactory.setAmazonSqs(amazonSQSAsync());
QueueMessageHandler queueMessageHandler = queueMsgHandlerFactory.createQueueMessageHandler();
List<HandlerMethodArgumentResolver> list = new ArrayList<>();
HandlerMethodArgumentResolver resolver = new PayloadArgumentResolver(new MappingJackson2MessageConverter());
list.add(resolver);
list.add( new HeaderMethodArgumentResolver(null, null));
queueMessageHandler.setArgumentResolvers(list);
return queueMessageHandler;
}
, а получатель:
@SqsListener(value = {"${cloud.aws.end-point.uri}"}, deletionPolicy = SqsMessageDeletionPolicy.ALWAYS)
public void receive(String message) {
System.out.println("Inside receive: " + message);
}
Если у этого метода есть какая-либо другая подпись, он даже не будет запущен. Что я должен сделать, чтобы получить необработанное сообщение aws, которое необходимо использовать в AwsSQSResponder?