繁体   English   中英

Spring引导JMS Listener - org.springframework.jms.config.JmsListenerEndpointRegistry.isAutoStartup()Z

[英]Spring boot JMS Listener - org.springframework.jms.config.JmsListenerEndpointRegistry.isAutoStartup()Z

我已经设置了一个JmsListener来读取sqs队列中的消息。 我真的创建了一个类似于下面的配置类来设置ConnectionFactory和JMSTemplate

 @Configuration
 @EnableJms
 public class SQSJmsConfig {
 private AWSCredentialsProvider awsCredentialsProvider;

 @Value("${aws.ses.accessKey}")
 private String accessKey;

 @Value("${aws.ses.secretKey}")
 private String secretKey;

 @Bean
 public DefaultJmsListenerContainerFactory jmsListenerContainerFactory() {
    AWSCredentials awsCredentials = new BasicAWSCredentials(accessKey, secretKey);
    awsCredentialsProvider = new AWSStaticCredentialsProvider(awsCredentials);

    SQSConnectionFactory sqsConnectionFactory = new SQSConnectionFactory(new ProviderConfiguration(),
            AmazonSQSClientBuilder.standard().withRegion(Regions.US_EAST_1).withCredentials(awsCredentialsProvider));

    DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
    factory.setConnectionFactory(sqsConnectionFactory);
    factory.setDestinationResolver(new DynamicDestinationResolver());
    factory.setConcurrency("3-10");
    factory.setSessionAcknowledgeMode(Session.CLIENT_ACKNOWLEDGE);
    return factory;
}

@Bean
public JmsTemplate defaultJmsTemplate() {
    AWSCredentials awsCredentials = new BasicAWSCredentials(accessKey, secretKey);
    awsCredentialsProvider = new AWSStaticCredentialsProvider(awsCredentials);

    SQSConnectionFactory sqsConnectionFactory = new SQSConnectionFactory(new ProviderConfiguration(),
            AmazonSQSClientBuilder.standard().withRegion(Regions.US_EAST_1).withCredentials(awsCredentialsProvider));

    return new JmsTemplate(sqsConnectionFactory);
 }
}

然后我创建了一个JmsListener方法来从sqs队列中读取消息

@Service
public class SQSQueueService {
private static final Logger log = LoggerFactory.getLogger(SQSQueueService.class);

@JmsListener(destination = "${aws.sqs.queueName}")
public void readPlan(SQSEmailStatusQueue sqsEmailStatusQueue) {
    try {
        log.info("SNS notification received from SQS queue");
        String message = sqsEmailStatusQueue.getMessage();
        System.out.println(message);
    } catch (Exception e) {
        log.error(e.getMessage());
    }
 }
}

之后,当我运行项目时,我得到以下异常

java.lang.AbstractMethodError:org.springframework.jms.config.JmsListenerEndpointRegistry.isAutoStartup()Z

这个例外的原因是什么?

问题在于依赖性。

`<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jms</artifactId>
    <version>5.1.6.RELEASE</version>
</dependency>`

我从中删除了该版本。 然后它奏效了。 任何人都可以解释一下为什么会这样吗?

如果您的应用程序使用spring-boot-starter-parent ,则可能会发生故障,并且还取决于:

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-jms</artifactId>
  <version>${spring.jms.version}</version>
</dependency>

利用父级提供的这种依赖性:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-activemq</artifactId>
</dependency>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM