Моя система основана на верблюде и использует 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, который, в свою очередь, используется внутри 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>