Сообщение SQS с номером MessageAttribute, не полученное слушателем Spring JMS

#spring-boot #jms #aws-sdk #amazon-sqs #spring-jms

#весенняя загрузка #jms #aws-sdk #amazon-sqs #spring-jms

Вопрос:

Ниже приведена моя настройка:

  • Тема AWS SNS
  • Очередь AWS SQS подписана на тему с включенной «доставкой необработанных сообщений»
  • Приложение Spring boot с JmsListener прослушиванием в очереди SQS

Версии:

  • amazon-sqs-java-messaging-lib 1.0.4
  • весенняя загрузка 1.4.2.ВЫПУСК
  • spring-jms: 4.3.4.ВЫПУСК
  • spring-cloud: 1.1.8.RELEASE

Когда я публикую сообщение в теме SNS (через консоль AWS) с Number MessageAttribute, оно попадает в SQS. Однако мой код прослушивателя JMS не получает сообщение, т. Е. Код вообще не запускается при получении сообщения с Number MessageAttribute от SQS.

Пример:

  1. Сообщение SQS, полученное без Number атрибута MessageAttribute ==> триггеры JmsListener

введите описание изображения здесь

  1. Сообщение SQS, полученное с Number MessageAttribute ==> НЕ срабатывает JmsListener

введите описание изображения здесь Код:

 @JmsListener(destination = "sqs.queue.name")
public void processAccountMessage(TextMessage msg) throws JMSException {
    logger.info("msg: {}", msg);
}
  

и JmsListenerContainerFactory код, как показано ниже:

 @Configuration
@EnableJms
public class MessageConfig {

@Inject
private ClientFactory<AmazonSQS> sqsClientFactory;

@Value("${aws.region}")
private String awsRegion;

    @Bean
    public DefaultJmsListenerContainerFactory jmsListenerContainerFactory() throws Exception {
        DefaultJmsListenerContainerFactory factory =
                new DefaultJmsListenerContainerFactory();
        factory.setConnectionFactory(new SQSConnectionFactory(new ProviderConfiguration(), this.sqsClientFactory.getClient(AmazonSQS.class, this.awsRegion)));
        factory.setDestinationResolver(new DynamicDestinationResolver());
        factory.setConcurrency("1");
        factory.setSessionAcknowledgeMode(Session.CLIENT_ACKNOWLEDGE);
        return factory;
    }
  

Комментарии:

1. Я не могу проверить прямо сейчас, но может ли это быть связано с аргументом processAccountMessage , который ожидает TextMessage ?

2. Я изменил его на Message , и у него было такое же поведение. Какой тип, по вашему мнению, может там работать?