Я пытаюсь получить сообщения из очереди SQS локального стека из проекта Spring Boot, используя spring-cloud-starter-aws-messaging
Config
@Configuration
public class SQSConfig {
private final SQSConnectionFactory connectionFactory;
public SQSConfig() {
connectionFactory = SQSConnectionFactory.builder()
.withEndpoint("http://localhost:4576")
.withAWSCredentialsProvider(new StaticCredentialsProvider(
new BasicAWSCredentials("", "")
))
.build();
}
@Bean
public JmsListenerContainerFactory jmsListenerContainerFactory(){
DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
factory.setConnectionFactory(this.connectionFactory);
factory.setDestinationResolver(new DynamicDestinationResolver());
factory.setConcurrency("3-10");
factory.setSessionAcknowledgeMode(Session.CLIENT_ACKNOWLEDGE);
factory.setMessageConverter(messageConverter());
return factory;
}
@Bean
public MessageConverter messageConverter() {
Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
builder.serializationInclusion(JsonInclude.Include.NON_EMPTY);
MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();
converter.setObjectMapper(builder.build());
converter.setTargetType(MessageType.OBJECT);
}
Услуги:
@Service
public class QueueService {
@JmsListener(destination = "myqueuename")
public String listen(Object message){
System.out.println(message);
return null;
}
}
Системный администратор показывает мне, что объект, который я получаю, - SQSTextMessage
com.amazon.sqs.javamessaging.message.SQSTextMessage@8390af8
Чтобы я мог сделать это:
@JmsListener(destination = "e-legajo")
public String listen(SQSTextMessage message){
try {
String message1 = message.getText();
} catch (JMSException e) {
e.printStackTrace();
}
System.out.println(message);
return null;
}
И работа с сообщением String.
Но вот мои сомнения. Я видел, что amazon также предоставляет другие типы сообщений, такие как SQSObjectMessage и SQSBytesMessages, я пытаюсь выяснить, как использовать SQSObjectMessage, чтобы я мог напрямую получать объект Java, но не могу найти способ.
Я не нашел ни одного примера этой реализации, и, поскольку я впервые с очередями в целом (SQS или JMS), я не знаю, кто отвечает за это, JMSListener, MessageConverter или любой другой другой боб AWS JDK, создающий магию в середине?