saslConfig使用spring rabbitmq无法正常工作

时间:2017-03-17 07:07:17

标签: rabbitmq ssl-certificate spring-amqp

我的项目需要SSL身份验证机制为 EXTERNAL (仅使用SSL证书并避免在rabbitmq上使用用户名/密码)。对于connectionfactory bean,我们给了属性name =“saslConfig”value =“DefaultSaslConfig.EXTERNAL”,但是我们收到一个错误:“无法将类型[java.lang.String]的值转换为必需的类型[com.rabbitmq] .client.SaslConfig]属性'saslConfig':找不到匹配的编辑器或转换策略“。我们尝试了其他值,如value =“com.rabbitmq.client.DefaultSaslConfig.EXTERNAL”和value =“EXTERNAL”,但仍然存在错误。您能否查看下面的配置和日志,并向我提供您的建议。

Bean配置

  <rabbit:connection-factory id="connectionFactory" connection-factory="clientConnectionFactory" host="x.y.z.m" port="5671"/>
    <bean id="clientConnectionFactory" class="org.springframework.amqp.rabbit.connection.RabbitConnectionFactoryBean">
     <property name="useSSL" value="true" />
     <property name="saslConfig" value=com.rabbitmq.client.DefaultSaslConfig.EXTERNAL"/> 
     <property name="sslPropertiesLocation" value="classpath:/rabbitSSL.properties"/></bean>

日志

Caused by: java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [com.rabbitmq.client.SaslConfig] for property 'saslConfig': no matching editors or conversion strategy found
at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:306)
at org.springframework.beans.AbstractNestablePropertyAccessor.convertIfNecessary(AbstractNestablePropertyAccessor.java:576)

2 个答案:

答案 0 :(得分:0)

EXTERNAL是一个静态变量,而不是枚举。

使用

"#{T(com.rabbitmq.client.DefaultSaslConfig).EXTERNAL}"

这是一个使用类型运算符(T)的SpEL表达式来获取对静态的引用。

请参阅SpEL

答案 1 :(得分:0)

以下内容对我有用(来源:https://github.com/spring-projects/spring-boot/issues/6719#issuecomment-259268574):

@PostConstruct
public void init() {
    if (rabbitProperties.getSsl().isEnabled() && rabbitProperties.getSsl().getKeyStore() != null) {
        cachingConnectionFactory.getRabbitConnectionFactory().setSaslConfig(DefaultSaslConfig.EXTERNAL);
    }
}