【发布时间】:2015-04-01 13:20:18
【问题描述】:
我正在尝试在 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 的解决方案,但这也是不可能的。
所以总结起来,问题是:
- 是否可以在 Web 应用程序本地设置 ActiveMQ 代理,远程应用程序可以通过网络访问该代理?
- 代理是否需要显式配置?
- 如果是,是否可以不使用 Spring 进行代理配置,而是使用属性文件或不向项目添加依赖项的类似文件来完成此操作?
【问题讨论】: