如何在tomcat中将远程jms客户端连接到嵌入式activemq代理?

时间:2012-04-25 18:42:14

标签: xml activemq

我在tomcat中有一个嵌入式代理,我的webapp客户端使用vm:// localhost正常连接。我希望另一个jvm中的一些远程客户端能够连接到嵌入式代理。如何设置嵌入式代理以侦听端口#?这适用于嵌入式客户端:

server.xml片段:

<Resource auth="Container" 
name="jms/ConnectionFactory" 
type="org.apache.activemq.ActiveMQConnectionFactory" 
description="JMS Connection Factory" 
factory="org.apache.activemq.jndi.JNDIReferenceFactory" 
brokerURL="vm://localhost" 
brokerName="MyActiveMQBroker" 
useEmbeddedBroker="true"/>  

这不适用于远程客户端,但我的嵌入式客户端仍然使用vm:// localhost:

进行连接
<Resource auth="Container" 
name="jms/ConnectionFactory" 
type="org.apache.activemq.ActiveMQConnectionFactory" 
description="JMS Connection Factory" 
factory="org.apache.activemq.jndi.JNDIReferenceFactory" 
brokerURL="vm:(broker:(tcp://localhost:61616))" 
brokerName="MyActiveMQBroker" 
useEmbeddedBroker="true"/>  

我的远程客户端出现此错误:

无法连接到代理URL:tcp:// localhost:61616。原因:java.net.ConnectException:拒绝连接

我也一直在尝试这个:

brokerURL="vm://localbroker?brokerConfig=xbean:file:C:/temp/activemq.xml"

并在activemq.xml中设置:

<transportConnectors>
<transportConnector name="openwire" uri="tcp://0.0.0.0:61616"/>
</transportConnectors>

<networkConnectors>
<networkConnector uri="static:(tcp://0.0.0.0:61616)"/>
</networkConnectors>

我不相信xml文件正在被读取,因为我的症状在编辑时不会改变。在tomcat启动时,当第一个客户端webapp部署时,代理启动并报告:

Connector vm:// localhost Started

我从未看到另一个连接器启动,例如tcp://0.0.0.0:61616。这可能吗?

1 个答案:

答案 0 :(得分:2)

vm://localhost将无法打开远程代理连接的tcp端口。 vm协议可以在JVM中使用。

本地tomcat上的配置(例如,将主机名视为“tomcathostone”的本地服务器)

<Resource auth="Container" 
name="jms/ConnectionFactory" 
type="org.apache.activemq.ActiveMQConnectionFactory" 
description="JMS Connection Factory" 
factory="org.apache.activemq.jndi.JNDIReferenceFactory" 
brokerURL="broker:(tcp://0.0.0.0:61616)" 
brokerName="MyActiveMQBroker" 
useEmbeddedBroker="true"/> 

远程tomcat上的配置(例如,考虑主机名为“tomcathosttwo”的远程服务器)

<Resource auth="Container" 
name="jms/ConnectionFactory" 
type="org.apache.activemq.ActiveMQConnectionFactory" 
description="JMS Connection Factory" 
factory="org.apache.activemq.jndi.JNDIReferenceFactory" 
brokerURL="broker:(tcp://tomcathosttwo:61616,network:static:tcp://tomcathostone:61616)" 
brokerName="MyActiveMQBroker" 
useEmbeddedBroker="true"/>