-1

I am using spring cloud starter aws messaging

implementation 'io.awspring.cloud:spring-cloud-starter-aws'
implementation 'io.awspring.cloud:spring-cloud-starter-aws-messaging'

version

set('springCloudAwsVersion', '2.3.1')

dependencyManagement {
    imports {
        mavenBom "io.awspring.cloud:spring-cloud-aws-dependencies:${springCloudAwsVersion}"
    }
}

my config beans

@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;
  }

problem when I @inject QueueMessagingTemplate and use method sendAndConvert all java8 time field of my POJO converted as with separate fields minute hours etc ... object not string. So consequence when I try to deserialize my object mapper throw exception

I try to register QueueMessagingTemplate with GroupIdResolver(as null) and same mapping2jacksonConverter but result that asyncClient Stop connecting to queue

John Rotenstein
  • 241,921
  • 22
  • 380
  • 470
faceoff
  • 151
  • 3
  • 12

1 Answers1

0

In my case the problem solved with creating FIFO queue with groupId and deduplicationId also added map2jackson into queuTemplate

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