Ниже мои настройки:
- AWS SNS Topic
- Очередь AWS SQS, подписанная на тему с включенной «Необработанной доставкой сообщений»
- Приложение загрузки Spring с
JmsListener
прослушиванием в очереди SQS
Версия:
- amazon-sqs-java-messaging-lib 1.0.4
- spring-boot 1.4.2.RELEASE
- spring-jms: 4.3.4. РЕЛИЗ
- весна-облако: 1.1.8. РЕЛИЗ
Когда я публикую сообщение в теме 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;
}