【发布时间】:2016-11-22 15:01:21
【问题描述】:
问题陈述:我正在寻求帮助,将 JMS 连接工厂作为 Tomcat7 中的容器资源公开给远程 ActiveMQ 实例(侦听 tcp),以便部署在 Tomcat7 上的 Web 应用程序可以访问它。
我的配置:我有一个 Tomee 和一个 Tomcat7 实例在服务器上运行。托管到 ActiveMQ 的 Tomee 配置为侦听 tcp 线格式连接(tomee.xml 下面):
<?xml version="1.0" encoding="UTF-8"?>
<tomee>
<!-- see http://tomee.apache.org/containers-and-resources.html -->
<Resource id="MyJmsResourceAdapter" type="ActiveMQResourceAdapter">
BrokerXmlConfig = broker:(tcp://10.173.80.42:61619)
ServerUrl = tcp://10.173.80.42:61619
</Resource>
<Resource id="jms/ConnectionFactory" type="javax.jms.ConnectionFactory">
ResourceAdapter = MyJmsResourceAdapter
</Resource>
<Container id="MyJmsMdbContainer" type="MESSAGE">
ResourceAdapter = MyJmsResourceAdapter
</Container>
<Resource id="myqueue" type="javax.jms.Queue"/>
<!-- activate next line to be able to deploy applications in apps -->
<Deployments dir="apps" />
</tomee>
在我的 Tomcat7 实例中,我将 server.xml 配置为:
<Resource name="jms/ConnectionFactory"
auth="Container"
type="org.apache.activemq.ActiveMQConnectionFactory"
description="JMS Connection Factory"
factory="org.apache.activemq.jndi.JNDIReferenceFactory"
brokerURL="tcp://10.173.80.42:61619?soTimeout=60000"
brokerName="ActiveMQStageBroker"
useEmbeddedBroker="false" />
<Resource name="myQueue"
auth="Container"
type="org.apache.activemq.command.ActiveMQQueue"
proxy-interface="javax.jms.Queue"
description="My Queue"
factory="org.apache.activemq.jndi.JNDIReferenceFactory"
physicalName="myQueue" />
并且我已将activemq-all-5.12.0.jar 放在Tomcat7 共享库文件夹中。我还在 Web 应用程序 META-INF 文件夹下的 context.xml 文件中进行了相关引用,并在 web.xml 中创建了一个添加的资源引用(基本上在这里抓住了稻草)
我的观察:当我启动触发与 ActiveMQ 通信的操作时,我在日志文件中看到以下条目:
2016-07-19 10:40:07,659 [system ] DEBUG WireFormatNegotiator - Sending: WireFormatInfo { version=11, properties={MaxFrameSize=9223372036854775807, CacheSize=1024, CacheEnabled=true, Host=10.173.80.42, SizePrefixDisabled=false, MaxInactivityDurationInitalDelay=10000, TcpNoDelayEnabled=true, MaxInactivityDuration=30000, TightEncodingEnabled=true, StackTraceEnabled=true}, magic=[A,c,t,i,v,e,M,Q]}
2016-07-19 10:40:07,666 [.42:61619@45620] DEBUG InactivityMonitor - Using min of local: WireFormatInfo { version=11, properties={MaxFrameSize=9223372036854775807, CacheSize=1024, CacheEnabled=true, Host=10.173.80.42, SizePrefixDisabled=false, MaxInactivityDurationInitalDelay=10000, TcpNoDelayEnabled=true, MaxInactivityDuration=30000, TightEncodingEnabled=true, StackTraceEnabled=true}, magic=[A,c,t,i,v,e,M,Q]} and remote: WireFormatInfo { version=10, properties={CacheSize=1024, MaxFrameSize=9223372036854775807, CacheEnabled=true, SizePrefixDisabled=false, TcpNoDelayEnabled=true, MaxInactivityDurationInitalDelay=10000, MaxInactivityDuration=30000, TightEncodingEnabled=true, StackTraceEnabled=true}, magic=[A,c,t,i,v,e,M,Q]}
2016-07-19 10:40:07,667 [.42:61619@45620] DEBUG WireFormatNegotiator - Received WireFormat: WireFormatInfo { version=10, properties={CacheSize=1024, MaxFrameSize=9223372036854775807, CacheEnabled=true, SizePrefixDisabled=false, TcpNoDelayEnabled=true, MaxInactivityDurationInitalDelay=10000, MaxInactivityDuration=30000, TightEncodingEnabled=true, StackTraceEnabled=true}, magic=[A,c,t,i,v,e,M,Q]}
2016-07-19 10:40:07,667 [.42:61619@45620] DEBUG WireFormatNegotiator - tcp:///10.173.80.42:61619@45620 before negotiation: OpenWireFormat{version=11, cacheEnabled=false, stackTraceEnabled=false, tightEncodingEnabled=false, sizePrefixDisabled=false, maxFrameSize=9223372036854775807}
2016-07-19 10:40:07,668 [.42:61619@45620] DEBUG WireFormatNegotiator - tcp:///10.173.80.42:61619@45620 after negotiation: OpenWireFormat{version=10, cacheEnabled=true, stackTraceEnabled=true, tightEncodingEnabled=true, sizePrefixDisabled=false, maxFrameSize=9223372036854775807}
2016-07-19 10:40:08,834 [WriteCheckTimer] DEBUG AbstractInactivityMonitor - WriteChecker: 10000ms elapsed since last write check.
2016-07-19 10:40:08,836 [yMonitor Worker] DEBUG AbstractInactivityMonitor - Running WriteCheck[tcp://10.173.80.42:61619]
2016-07-19 10:40:08,834 [WriteCheckTimer] DEBUG AbstractInactivityMonitor - WriteChecker: 10000ms elapsed since last write check.
2016-07-19 10:40:08,836 [yMonitor Worker] DEBUG AbstractInactivityMonitor - Running WriteCheck[tcp://10.173.80.42:61619]
2016-07-19 10:40:18,835 [WriteCheckTimer] DEBUG AbstractInactivityMonitor - WriteChecker: 10000ms elapsed since last write check.
2016-07-19 10:40:18,835 [yMonitor Worker] DEBUG AbstractInactivityMonitor - Running WriteCheck[tcp://10.173.80.42:61619]
2016-07-19 10:40:27,667 [WriteCheckTimer] DEBUG AbstractInactivityMonitor - WriteChecker: 10000ms elapsed since last write check.
2016-07-19 10:40:27,668 [yMonitor Worker] DEBUG AbstractInactivityMonitor - Running WriteCheck[tcp://10.173.80.42:61619]
2016-07-19 10:40:28,813 [ ReadCheckTimer] DEBUG AbstractInactivityMonitor - 30000ms elapsed since last read check.
2016-07-19 10:40:28,834 [WriteCheckTimer] DEBUG AbstractInactivityMonitor - WriteChecker: 10000ms elapsed since last write check.
2016-07-19 10:40:28,834 [yMonitor Worker] DEBUG AbstractInactivityMonitor - Running WriteCheck[tcp://10.173.80.42:61619]
2016-07-19 10:40:37,667 [WriteCheckTimer] DEBUG AbstractInactivityMonitor - WriteChecker: 10000ms elapsed since last write check.
2016-07-19 10:40:37,668 [yMonitor Worker] DEBUG AbstractInactivityMonitor - Running WriteCheck[tcp://10.173.80.42:61619]
2016-07-19 10:40:38,834 [WriteCheckTimer] DEBUG AbstractInactivityMonitor - WriteChecker: 10000ms elapsed since last write check.
2016-07-19 10:40:38,835 [yMonitor Worker] DEBUG AbstractInactivityMonitor - Running WriteCheck[tcp://10.173.80.42:61619]
2016-07-19 10:40:47,667 [ ReadCheckTimer] DEBUG AbstractInactivityMonitor - 30000ms elapsed since last read check.
另外,当我查看队列的 EnqueueCount 和 DequeueCount 时,我发现它们没有改变。
由于日志表明我的Tomcat7 Container确实收到了来自远程实例的信息(参考“Received Wireformat: ...”),所以两个实例可以通信。但是为什么我无法发送数据?
附录:部署在托管 ActiveMQ 的 Tomee 实例中的相同 Web 应用程序可以与队列无缝通信。
感谢任何关于我可能做错的想法或我可以在 Tomee 和 Tomcat7 端尝试的选项。
提前致谢!
【问题讨论】:
-
为什么不只运行一个独立的代理呢?您已经在外部连接
-
@JonathanS.Fisher,是的,这是一个选项,我也在研究它。但是,至少从理论上讲,上述设置也应该可以工作。使用基于 Tomee 的队列的另一个驱动原因是因为 Tomee 容器托管了一个 MDB 驱动的服务,该服务与队列一起工作得很好。关于可能导致上述问题的任何想法?
标签: jms tomcat7 activemq apache-tomee