通过TCP使用ActiveMQ代理的Tomcat Web应用程序

时间:2015-04-01 13:20:19

标签: tomcat activemq jndi

我正在尝试在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的一些解决方案,但这也是不可能的。

总而言之,问题是:

  1. 是否可以设置Web应用程序本地的ActiveMQ代理,可以通过远程应用程序通过网络访问?
  2. 代理需要显式配置吗?
  3. 如果是,可以在不使用Spring进行代理配置的情况下完成此操作,而是使用属性文件或类似的不会向项目添加依赖项的内容吗?

1 个答案:

答案 0 :(得分:1)

您可以将ActiveMQ代理嵌入到您的应用程序中,也可以作为独立的Java程序。代理配置不需要Spring。

http://activemq.apache.org/how-do-i-embed-a-broker-inside-a-connection.html