是否有可能(如果是,使用什么配置?)让一个JBoss实例上运行的Spring应用程序连接到在不同JBoss实例上定义的JMS队列?我读了一些关于如何以编程方式执行此操作的页面,但是是否可以在Spring应用程序中注入注入队列,以便应用程序不会知道队列的远程位置而不需要执行一个明确的查找?
理想情况下,让&#34;客户端JBoss&#34;将队列的JNDI名称解析为远程队列。可接受的选项是让客户端应用程序在<jms:listener>
配置中将队列定义为远程。
软件:JBoss EAP 6.2,Spring 3.x
答案 0 :(得分:0)
是的,您可以使用远程处理NettyConnectionFactory
<bean name="liveTransportConfiguration" class="org.hornetq.api.core.TransportConfiguration">
<constructor-arg value="org.hornetq.core.remoting.impl.netty.NettyConnectorFactory" />
<constructor-arg>
<map key-type="java.lang.String" value-type="java.lang.Object">
<entry key="port" value="5445"></entry>
<entry key="host" value="ip of server"></entry>
</map>
</constructor-arg>
</bean>
<bean name="connectionFactory" class="com.kp.KPHornetQJMSConnectionFactory"
destroy-method="close">
<constructor-arg name="ha" type="boolean" value="false" />
<constructor-arg>
<array>
<ref bean="liveTransportConfiguration"></ref>
</array>
</constructor-arg>
<property name="clientFailureCheckPeriod" value="5000" />
<property name="retryInterval" value="1000" />
<property name="retryIntervalMultiplier" value="1.0" />
<property name="reconnectAttempts" value="-1" />
<property name="confirmationWindowSize" value="-1" />
</bean>
<bean name="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="connectionFactory"></property>
</bean>
<bean name="kpListener" class="Your jms MessageListener">
<property name="jmsTemplate" ref="jmsTemplate"></property>
</bean>
<jms:listener-container connection-factory="connectionFactory" concurrency="1">
<jms:listener destination="myqueue" ref="kpListener" method="onMessage" />
</jms:listener-container>
KPHornetQJMSConnectionFactory.java类
public class KPHornetQJMSConnectionFactory extends HornetQJMSConnectionFactory {
private static final long serialVersionUID = -712113311282964108L;
public KPHornetQJMSConnectionFactory(final boolean ha,
org.hornetq.api.core.TransportConfiguration transportConfiguration) {
super(ha, transportConfiguration);
super.setUseGlobalPools(false);
}
}