如何在Spring xml配置中使用JNDI变量设置rabbitmq连接属性?

时间:2014-04-07 12:23:34

标签: spring rabbitmq jndi

我在Spring中有一个使用RabbitMQ的应用程序。我在这个xml中使用基于xml的上下文配置和兔子命名空间。 到目前为止它看起来像这样:

<rabbit:connection-factory id="rabbitConnectionFactory" host="localhost" port="5672"/>

但现在我想将JNDI变量用于主机和端口属性。 我知道如何在使用“经典”bean定义时使用JNDI,但我知道如何同时使用JNDI和兔子命名空间。 我无法定义兔子的任何子元素:连接元素。我收到一个错误,说它不能有任何子节点。

任何帮助表示赞赏:)

EDIT 这就是我在“标准”bean(没有特殊命名空间)中使用JNDI查找的方法

<bean id="connector" class="com.foo.ConnectionProvider">
   <constructor-arg name="url">
        <jee:jndi-lookup expected-type="java.lang.String" jndi-name="java:comp/env/service/url"/>
   </constructor-arg>
</bean>

在META-INF / context.xml中:

<ResourceLink name="service/url" global="service/url" type="java.lang.String"/>

但正如我所说,我不知道如何使用兔子命名空间来完成它。尝试使用谷歌搜索没有成功..

2 个答案:

答案 0 :(得分:1)

我发现我可以使用“标准”bean定义。我对这个解决方案并不满意,但至少它确实有用。

    <bean id="rabbitConnectionFactory"               class="org.springframework.amqp.rabbit.connection.CachingConnectionFactory">
        <constructor-arg name="hostname" >
            <jee:jndi-lookup expected-type="java.lang.String" 
                              jndi-name="java:comp/env/rabbit/host"/>
        </constructor-arg>
        <constructor-arg name="port" >
            <jee:jndi-lookup expected-type="java.lang.Integer" 
                              jndi-name="java:comp/env/rabbit/port"/>
        </constructor-arg>
        <property name="username" value="guest"/>
        <property name="password" value="guest"/>
    </bean>

    <rabbit:template id="amqpTemplate" connection-factory="rabbitConnectionFactory" exchange="mcs-notifications.topic"/>
    <rabbit:admin connection-factory="rabbitConnectionFactory"/> 

答案 1 :(得分:1)

另一种选择是使用RMQConnectionFactory

<Resource name="jms/rabbitConnectionFactory" type="com.rabbitmq.jms.admin.RMQConnectionFactory"
        factory="org.apache.naming.factory.BeanFactory" username="guest"
        password="guest" />