代码之家  ›  专栏  ›  技术社区  ›  Benoit

QPID连接工厂属性

  •  0
  • Benoit  · 技术社区  · 6 年前

    我的系统基于camel和use 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&amp;transport.keyStorePassword=*******&amp;transport.trustStoreLocation=/very/long/path/server.keystore&amp;transport.trustStorePassword=*******"/>
    </bean>
    

    • 首先,它不容易阅读和维护。
    • 有些组件会记录URI,这样就可以记录路径(我可以使用它)和密码(哎哟…)。

    我知道可以通过系统属性配置( javax.net.ssl.keyStore

    是否有方法配置 以另一种方式?

    类似于:

    <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>
    

    <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>
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   batwad    6 年前

    简短的回答是不,这就是全班所支持的。但是,您可以编写一个配置bean,它具有您所需的属性,并具有创建bean的属性。从我的头顶,像这样:

    @Configuration
    public class QpidConfiguration {
    
        // Add setters for these
        private String host;
        private int port = 5671;
        private String keyStore;
        private String keyStorePassword;
        private String trustStoreLocation;
        private String trustStorePassword;
    
        @Bean
        public JmsConnectionFactory createConnectionFactory() {
            return new JmsConnectionFactory("amqps://" + host" + ":" + port + "?transport.keyStoreLocation=" + keyStoreLocation + "&transport.keyStorePassword=" + keyStorePassword + "&transport.trustStoreLocation=" + trustStoreLocation + "&transport.trustStorePassword=" + trustStorePassword);
        }
    }
    

    为了安全起见,您可能需要在其中添加一些参数验证。

    <bean id="jmsConnectionFactory" class="com.example.QpidConfiguration">
        <property name="host" value="some-location"/>
        <property name="keyStoreLocation" value="/very/long/path/nnn-openssl.p12"/>
        ...
    </bean>
    

    你也可以利用加密的属性占位符,如果你的心如此渴望。