amazon-web-services - spring cloud aws消息传递sqs将localdatetime序列化为字符串
问题描述
我正在使用 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 我的 POJO 的所有 java8 时间字段转换为单独的字段分钟小时等时出现问题......对象不是字符串。因此,当我尝试反序列化我的对象映射器抛出异常时
我尝试使用 GroupIdResolver(as null) 和相同的 mapping2jacksonConverter 注册 QueueMessagingTemplate 但导致 asyncClient 停止连接到队列
解决方案
在我的情况下,使用 groupId 和 deduplicationId 创建 FIFO 队列解决了问题,还将 map2jackson 添加到 queuTemplate
@Bean
public QueueMessagingTemplate queueMessagingTemplate(final AmazonSQSAsync amazonSqs) {
return new QueueMessagingTemplate(amazonSqs, (ResourceIdResolver) null, mappingJackson2MessageConverter(messageConverter()));
}
推荐阅读
- javascript - 如何在反应传单中选择一个区域
- scala - ScalaTest中的BeforeAndAfter和BeforeAndAfterEach有什么区别
- java - 从任何虚拟帐户发送邮件,而不在 java 中启用不太安全的应用程序选项
- raspberry-pi3 - 在运行 Windows IoT Core 的 Raspberry pi 上配置 dTPM 芯片
- ssis - SSIS - 打开 XML 文件,在 2 个字符串之间查找字符串并留下找到的字符串
- excel - 如何使用vba获取目录中的文件夹和子文件夹中有多少文件
- apache-flink - 从 Postgres 表创建 Flink 数据流
- python - 如何从python中的列表中收集新列表
- c++ - 失败的三元运算符
- java - 共享类不能引用隔离类