#amazon-web-services #cloud #amazon-sqs #spring-cloud-aws
Вопрос:
Я использую spring cloud starter для обмена сообщениями aws
implementation 'io.awspring.cloud:spring-cloud-starter-aws'
implementation 'io.awspring.cloud:spring-cloud-starter-aws-messaging'
версия
set('springCloudAwsVersion', '2.3.1')
dependencyManagement {
imports {
mavenBom "io.awspring.cloud:spring-cloud-aws-dependencies:${springCloudAwsVersion}"
}
}
мои бобы конфигурации
@Bean
public QueueMessagingTemplate queueMessagingTemplate(final AmazonSQSAsync amazonSqs) {
return new QueueMessagingTemplate(amazonSqs);
}
@Bean
public AmazonSQSAsync amazonSqs() {
return AmazonSQSAsyncClientBuilder.standard()
.build();
}
@Bean
public ObjectMapper messageConverter() {
return new ObjectMapper().findAndRegisterModules();
}
@Bean
public MappingJackson2MessageConverter mappingJackson2MessageConverter(final ObjectMapper objectMapper) {
final var jacksonMessageConverter = new MappingJackson2MessageConverter();
jacksonMessageConverter.setObjectMapper(objectMapper);
jacksonMessageConverter.setSerializedPayloadClass(String.class);
jacksonMessageConverter.setStrictContentTypeMatch(false);
return jacksonMessageConverter;
}
@Bean
public QueueMessageHandlerFactory queueMessageHandlerFactory(final MappingJackson2MessageConverter messageConverter) {
final var factory = new QueueMessageHandlerFactory();
factory.setArgumentResolvers(List.of(new PayloadMethodArgumentResolver(messageConverter)));
return factory;
}
@Bean
public SimpleMessageListenerContainerFactory simpleMessageListenerContainerFactory(final AmazonSQSAsync amazonSqs) {
final var factory = new SimpleMessageListenerContainerFactory();
factory.setAmazonSqs(amazonSqs);
factory.setMaxNumberOfMessages(1);
return factory;
}
проблема, когда я @inject QueueMessagingTemplate и использую метод sendAndConvert, все поле времени java8 моего POJO преобразуется как с отдельными полями минутные часы и т. Д… объект, а не строка.
Поэтому, когда я пытаюсь десериализовать свой картограф объектов, возникает исключение
Я пытаюсь зарегистрировать QueueMessagingTemplate с помощью GroupIdResolver(как null) и того же преобразователя 2jacksonconverter, но в результате asyncClient перестает подключаться к очереди
Ответ №1:
В моем случае проблема, решенная с созданием очереди FIFO с идентификатором группы и идентификатором дедупликации, также добавила map2jackson в queuTemplate
@Bean
public QueueMessagingTemplate queueMessagingTemplate(final AmazonSQSAsync amazonSqs) {
return new QueueMessagingTemplate(amazonSqs, (ResourceIdResolver) null, mappingJackson2MessageConverter(messageConverter()));
}