为CachingConnectionFactory设置SSL连接

时间:2018-06-29 10:10:16

标签: spring spring-amqp

我想为CachingConnectionFactory设置SSL连接工厂。我尝试过:

com.rabbitmq.client.ConnectionFactory cf = new ConnectionFactory();
cf.setHost(HOST);
cf.setPort(PORT);
cf.setUsername(USERNAME);
cf.setPassword(PASSWD);
cf.setVirtualHost(VIRTUAL_HOST);
cf.setAutomaticRecoveryEnabled(false);
cf.setConnectionTimeout(10000);
if (useSSL) {
    try {
        cf.useSslProtocol(sslContextConfiguration());
        System.out.println("Configuring SSL context...");
        } catch (IOException | TimeoutException e) {
        e.printStackTrace();
        }
}
connectionFactory = new CachingConnectionFactory(cf);
connectionFactory.setAddresses(ADDRESSES);
connectionFactory.setChannelCacheSize(25);
admin = new RabbitAdmin(connectionFactory);

到目前为止,我发现的唯一解决方案是为useSslProtocol设置com.rabbitmq.client.ConnectionFactory并将其设置为CachingConnectionFactory(cf)

有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

您所做的是正确的;该框架为Rabbit工厂做了provide a factory bean,但这确实是在使用spring XML配置时使配置更容易。

  

有更好的方法吗?

因此,没有“更好的方法”打开SSL,除了,我在过去几周内多次对您说过...

connectionFactory = new CachingConnectionFactory(cf);
admin = new RabbitAdmin(connectionFactory);

...您真的应该让Spring为您管理这些对象,而不是使用new...

编辑

另请参阅spring boot property in the appendix

spring.rabbitmq.ssl.enabled=false#是否启用SSL支持。

然后启动会为您自动配置SSL。

答案 1 :(得分:1)

CachingConnectionFactory现在能够通过使用URI而不是主机名来自动设置SSL:

connectionFactory.setUri("amqps://xxx"); 

在后台启用SSL