Tomcat 通过 TCP 使用 ActiveMQ 代理的 Web 应用程序
Tomcat web app with ActiveMQ broker over TCP
我正在尝试在 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
实现 class 调用连接工厂,如下所示:
InitialContext context = new InitialContext();
Context cntx = (Context) context.lookup("java:comp/env");
ActiveMQConnectionFactory factory = (ActiveMQConnectionFactory) cntx.lookup("jms/ConnectionFactory");
factory.createQueueConnection();
部署应用程序时,出现异常:
Could not connect to broker URL: tcp://localhost:61616. Reason: java.net.ConnectException: Connection refused
我认为这是因为代理本身没有配置,因为在在线示例中我看到具有 Spring 配置的文件附加到资源的 brokerUrl
属性。问题是项目环境是严格定义的,所以我不能使用spring来提供配置。我也看到了一些Camel的解决方案,但这也是不可能的。
所以总结起来,问题是:
- 是否可以在 Web 应用程序本地设置 ActiveMQ 代理,远程应用程序可以通过网络访问它?
- 代理是否需要显式配置?
- 如果是,是否可以在不使用 Spring 代理配置的情况下完成此操作,而是使用属性文件或不向项目添加依赖项的类似文件?
您可以将 ActiveMQ 代理嵌入到您的应用程序中或作为独立的 Java 程序。代理配置不需要 Spring。
http://activemq.apache.org/how-do-i-embed-a-broker-inside-a-connection.html
我正在尝试在 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
实现 class 调用连接工厂,如下所示:
InitialContext context = new InitialContext();
Context cntx = (Context) context.lookup("java:comp/env");
ActiveMQConnectionFactory factory = (ActiveMQConnectionFactory) cntx.lookup("jms/ConnectionFactory");
factory.createQueueConnection();
部署应用程序时,出现异常:
Could not connect to broker URL: tcp://localhost:61616. Reason: java.net.ConnectException: Connection refused
我认为这是因为代理本身没有配置,因为在在线示例中我看到具有 Spring 配置的文件附加到资源的 brokerUrl
属性。问题是项目环境是严格定义的,所以我不能使用spring来提供配置。我也看到了一些Camel的解决方案,但这也是不可能的。
所以总结起来,问题是:
- 是否可以在 Web 应用程序本地设置 ActiveMQ 代理,远程应用程序可以通过网络访问它?
- 代理是否需要显式配置?
- 如果是,是否可以在不使用 Spring 代理配置的情况下完成此操作,而是使用属性文件或不向项目添加依赖项的类似文件?
您可以将 ActiveMQ 代理嵌入到您的应用程序中或作为独立的 Java 程序。代理配置不需要 Spring。
http://activemq.apache.org/how-do-i-embed-a-broker-inside-a-connection.html