是否有具有SSL连接配置的Springboot ActiveMQ外部代理的完整示例



我们有一个带有 EJB 的 activemq 侦听器 MDB,使用 activemq-rar 通过 SSL 侦听代理.rar连接器,该连接器具有代理、SSL 证书和凭据配置。侦听器在 JBOSS EAP 6.4 中运行良好。但是,需要将此MDB转换为Spring Boot ActiveMQ侦听器。我可以看到许多关于Spring Boot ActiveMQ的文章示例,tcp://localhost:61616 简单。是否有完整的参考工作示例,即使用 Spring 引导通过 SSL 向外部代理生成消息和从外部代理侦听消息。

我尝试按照以下说明使用tcp创建生产和消费消息https://www.devglan.com/spring-boot/spring-boot-jms-activemq-example和http://activemq.apache.org/how-do-i-use-ssl.html

spring.activemq.broker-url=ssl://localhost:61616
spring.activemq.user=admin
spring.activemq.password=admin
spring.activemq.keyStore=broker.ks
spring.activemq.keyStorePassword=password
javax.net.ssl.keyStore=client.ks
javax.net.ssl.keyStorePassword=password
javax.net.ssl.trustStore=client.ts

我看到下面的异常。需要帮助。

2019-01-14 00:54:33.209  INFO 13964 --- [           main] com.rime.springboot.amc.Application      : Started Application in 5.783 seconds (JVM running for 7.081)
2019-01-14 00:54:38.203  INFO 13964 --- [enerContainer-1] o.s.j.l.DefaultMessageListenerContainer  : JMS message listener invoker needs to establish shared Connection
2019-01-14 00:54:38.244 ERROR 13964 --- [enerContainer-1] o.s.j.l.DefaultMessageListenerContainer  : Could not refresh JMS Connection for destination 'inbound.queue' - retrying using FixedBackOff{interval=5000, currentAttempts=0, maxAttempts=unlimited}. Cause: Could not connect to broker URL: ssl://localhost:61616. Reason: javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
2019-01-14 00:54:43.341 ERROR 13964 --- [enerContainer-1] o.s.j.l.DefaultMessageListenerContainer  : Could not refresh JMS Connection for destination 'inbound.queue' - retrying using FixedBackOff{interval=5000, currentAttempts=1, maxAttempts=unlimited}. Cause: Could not connect to broker URL: ssl://localhost:61616. Reason: javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?

目前似乎不支持通过属性自动配置。请参阅:https://github.com/spring-projects/spring-boot/issues/17365 和 https://github.com/spring-projects/spring-boot/issues/17589。

同时,可以使用您自己的 ActiveMQSslConnectionFactory Bean 覆盖默认连接,并提供您需要的 SSL 配置属性:

@Configuration
public class ActiveMQConfiguration {
    @Bean
    public ActiveMQSslConnectionFactory activeMQSslConnectionFactory(
            @Value("${spring.activemq.broker-url}") String brokerUrl,
            @Value("${spring.activemq.ssl.trustStorePath}") String trustStorePath,
            @Value("${spring.activemq.ssl.trustStorePass}") String trustStorePass,
            @Value("${spring.activemq.ssl.keyStorePath}") String keyStorePath,
            @Value("${spring.activemq.ssl.keyStorePass}") String keyStorePass) throws Exception {
        ActiveMQSslConnectionFactory factory = new ActiveMQSslConnectionFactory(brokerUrl);
        factory.setTrustStore(trustStorePath);
        factory.setTrustStorePassword(trustStorePass);
        factory.setKeyStore(keyStorePath);
        factory.setKeyStorePassword(keyStorePass);
        return factory;
    }
}

spring.activemq.ssl.*属性不基于任何现有或记录的属性,因此无需专门使用这些属性。

最新更新