Spring JMS侦听器未收到编号为MessageAttribute的SQS消息

时间:2019-04-08 03:54:02

标签: spring-boot jms aws-sdk amazon-sqs spring-jms

下面是我的设置:

  • AWS SNS主题
  • AWS SQS Queue订阅了启用了“原始消息传递”的主题
  • 使用JmsListener侦听SQS队列的Spring Boot应用程序

版本:

  • amazon-sqs-java-messaging-lib 1.0.4
  • spring-boot 1.4.2发行版
  • spring-jms:4.3.4。发布
  • spring-cloud:1.1.8.RELEASE

当我使用Number MessageAttribute将消息发布到SNS Topic(通过AWS控制台)时,到达SQS。但是,我的JMS侦听器代码没有收到消息-即,当从SQS收到带有Number MessageAttribute的消息时,代码根本不会被触发。

示例:

  1. 在没有Number MessageAttribute ==>的情况下收到的SQS消息将触发JmsListener

enter image description here

    通过Number MessageAttribute ==>收到的
  1. SQS消息不会触发JmsListener

enter image description here 代码:

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

0 个答案:

没有答案