我正在尝试在Tomcat中托管的Web应用程序的上下文中设置ActiveMQ代理。此外,我想要使用的连接器是TCP,因为最终应该可以从远程应用程序访问此代理。
到目前为止,我所做的是使用本地JNDI context.xml
配置创建一个简单的Web应用程序,如下所示:
<Resource auth="Container"
name="jms/ConnectionFactory"
type="org.apache.activemq.ActiveMQConnectionFactory"
description="JMSConnection"
factory="org.apache.activemq.jndi.JNDIReferenceFactory"
brokerURL="tcp://localhost:61616"
brokerName="MQBroker"/>
<Resource auth="Container"
name="jms/MQueue"
type="org.apache.activemq.command.ActiveMQQueue"
description="JMS queue"
factory="org.apache.activemq.jndi.JNDIReferenceFactory"
physicalName="SOME.QUEUE"/>
我相应地更新了web.xml
文件并从ServletContextListener
实现类调用了连接工厂,如下所示:
InitialContext context = new InitialContext();
Context cntx = (Context) context.lookup("java:comp/env");
ActiveMQConnectionFactory factory = (ActiveMQConnectionFactory) cntx.lookup("jms/ConnectionFactory");
factory.createQueueConnection();
部署应用时,我得到一个例外:
无法连接到代理URL:tcp:// localhost:61616。原因:java.net.ConnectException:拒绝连接
我认为这是因为代理本身没有配置,因为在线示例中我看到具有Spring配置的文件附加到资源的brokerUrl
属性。问题是项目环境是严格定义的,所以我不能使用spring来提供配置。我也看到了Camel的一些解决方案,但这也是不可能的。
总而言之,问题是:
答案 0 :(得分:1)
您可以将ActiveMQ代理嵌入到您的应用程序中,也可以作为独立的Java程序。代理配置不需要Spring。
http://activemq.apache.org/how-do-i-embed-a-broker-inside-a-connection.html