我在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"/>
但正如我所说,我不知道如何使用兔子命名空间来完成它。尝试使用谷歌搜索没有成功..
答案 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" />