#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.
Пример:
- Сообщение SQS, полученное без
Number
атрибута MessageAttribute ==> триггерыJmsListener
- Сообщение 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
, и у него было такое же поведение. Какой тип, по вашему мнению, может там работать?