【问题标题】:spring cloud aws messaging sqs serialize localdatetime as stringspring cloud aws消息sqs将localdatetime序列化为字符串
【发布时间】:2021-09-15 01:42:35
【问题描述】:

我正在使用 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

@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 停止连接到队列

【问题讨论】:

    标签: amazon-web-services cloud amazon-sqs spring-cloud-aws


    【解决方案1】:

    在我的情况下,使用 groupId 和 deduplicationId 创建 FIFO 队列解决了问题 还将map2jackson添加到queuTemplate中

    @Bean
      public QueueMessagingTemplate queueMessagingTemplate(final AmazonSQSAsync amazonSqs) {
        return new QueueMessagingTemplate(amazonSqs, (ResourceIdResolver) null, mappingJackson2MessageConverter(messageConverter()));
      }
    

    【讨论】:

      猜你喜欢
      • 2022-11-29
      • 2018-04-01
      • 2019-03-22
      • 1970-01-01
      • 1970-01-01
      • 2020-07-21
      • 2022-08-19
      • 2016-09-14
      • 2017-12-06
      相关资源
      最近更新 更多