带有 ActiveMQ 代理的 Tomcat Web 应用程序

标签 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();

部署应用程序时,出现异常:

Could not connect to broker URL: tcp://localhost:61616. Reason: java.net.ConnectException: Connection refused

我认为这是因为代理本身没有配置,因为在在线示例中我看到具有 Spring 配置的文件附加到资源的 brokerUrl 属性。问题是项目环境是严格定义的,所以我不能使用spring来提供配置。我也看到了 Camel 的一些解决方案,但这也是不可能的。

综上所述,问题是:

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

最佳答案

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

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

关于带有 ActiveMQ 代理的 Tomcat Web 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29391939/

相关文章:

spring - 不能用spring和tomcat运行昆德拉

jms - ActiveMQ 如何防止低优先级消息饥饿?

spring - 如果 ActiveMQ 服务器关闭,您应该如何处理从您的应用程序向 ActiveMQ 发送 JMS 消息的重试?

javax.jms.JMSSecurityException : User name [null] or password is invalid

spring - 如何在 Undertow 上定义 JNDI 数据源?

tomcat - 避免Tomcat删除已部署的webapp文件夹

tomcat - google-oauth-client-jetty 无法在 Tomcat 7 上运行

java - 在 Java EE 中缓存 DataSource 查找是否安全?

tomcat - 构建 Docker 镜像时使用主机的配置文件