【发布时间】:2019-03-27 13:18:41
【问题描述】:
我的系统是基于camel的,使用Apache QPID 0.37.0来消费来自远程AMQPS服务器的消息。我们的系统通过客户端证书进行身份验证。因此我有这样的配置:
<bean id="jmsConnectionFactory" class="org.apache.qpid.jms.JmsConnectionFactory">
<constructor-arg name="remoteURI" value="amqps://some-location:5671?transport.keyStoreLocation=/very/long/path/nnn-openssl.p12&transport.keyStorePassword=*******&transport.trustStoreLocation=/very/long/path/server.keystore&transport.trustStorePassword=*******"/>
</bean>
这一切正常。但是,以这种方式(即在 URI 中)配置密钥/信任存储有几个缺点:
- 首先,它不易阅读和维护。
- 某些组件会记录 URI,因此路径(我可以接受)和密码(哎呀...)会被记录。
我知道可以通过系统属性(javax.net.ssl.keyStore 等)进行配置,但这不是一个选项,因为不同的模块可能使用不同的密钥和信任库,我们希望将它们保存在单独的文件中。
有没有办法以不同的方式配置 JmsConnectionFactory 的那些传输属性?
类似:
<bean id="jmsConnectionFactory" class="org.apache.qpid.jms.JmsConnectionFactory">
<constructor-arg name="remoteURI" value="amqps://some-location:5671"/>
<property name="transport.keyStoreLocation" value="/very/long/path/nnn-openssl.p12"/>
...
</bean>
请注意,该工厂用于 JMSConfig,而 JMSConfig 又用于 AMQPComponent:
<bean id="jmsConfig" class="org.apache.camel.component.jms.JmsConfiguration" >
<property name="connectionFactory" ref="jmsConnectionFactory" />
...
</bean>
<bean id="amqp" class="org.apache.camel.component.amqp.AMQPComponent">
<property name="testConnectionOnStartup" value="true"/>
<property name="configuration" ref="jmsConfig" />
...
</bean>
【问题讨论】:
标签: apache-camel jms amqp qpid spring-camel