【问题标题】:Tomcat web app with ActiveMQ broker over TCP通过 TCP 使用 ActiveMQ 代理的 Tomcat Web 应用程序
【发布时间】: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 的解决方案,但这也是不可能的。

所以总结起来,问题是:

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

【问题讨论】:

    标签: tomcat activemq jndi


    【解决方案1】:

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

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

    【讨论】:

    • 确实,通过完全删除 jndi 配置并编写 java 代码,我几乎可以启动一个代理和一个由 servlet 上下文初始化触发的队列。
    猜你喜欢
    • 2015-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-18
    相关资源
    最近更新 更多