You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从WSO2向ActiveMQ队列发送消息失败,请求排查指导

WSO2连接ActiveMQ队列失败排查方案

我正尝试从WSO2向ActiveMQ的队列发送消息,但出现连接失败错误,请求帮忙排查问题。

报错信息

[2022-11-10 18:20:22,324] ERROR {JMSConnectionFactoryManager} - Error setting up connection factory : jms:/WajihsCheck?transport.jms.ConnectionFactoryJNDIName=QueueConnectionFactory&java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory&java.naming.provider.url=tcp://localhost:8161/admin/queues.jsp&transport.jms.DestinationType=queue
    org.apache.axis2.transport.jms.AxisJMSException: Cannot acquire JNDI context, JMS Connection factory : QueueConnectionFactory or default destination : null for JMS CF : jms:/WajihsCheck?transport.jms.ConnectionFactoryJNDIName=QueueConnectionFactory&java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory&java.naming.provider.url=tcp://localhost:8161/admin/queues.jsp&transport.jms.DestinationType=queue 
using : {java.naming.provider.url=tcp://localhost:8161/admin/queues.jsp, java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory, transport.jms.DestinationType=queue, transport.jms.ConnectionFactoryJNDIName=QueueConnectionFactory}

服务配置

<payloadFactory media-type="xml">
    <format>
        <m:getQuote xmlns:m="http://services.samples">
            <m:request>
                <m:book>
                    <m:isbn>$1</m:isbn>
                    <m:release>$2</m:release>
                </m:book>
                </m:request>
        </m:getQuote>
    </format>
    <args>
        <arg expression="$.isbn" evaluator="json"/>
        <arg expression="$.year" evaluator="json"/>
    </args>
</payloadFactory>
<property name="OUT_ONLY" value="true"/>
<call>
    <endpoint>
        <address uri="jms:/WajihsCheck?transport.jms.ConnectionFactoryJNDIName=QueueConnectionFactory&amp;
                      java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory&amp;
                      java.naming.provider.url=tcp://localhost:8161/admin/queues.jsp&amp;transport.jms.DestinationType=queue"/>
    </endpoint>
</call>

排查与解决方案

1. 修正JNDI Provider URL

当前java.naming.provider.url指向了ActiveMQ的Web管理控制台地址,而JNDI连接需要使用ActiveMQ的TCP服务端口(默认61616),而非控制台的8161端口。正确配置应为:

tcp://localhost:61616

2. 验证ActiveMQ服务状态

  • 确认ActiveMQ服务已启动,可通过访问http://localhost:8161/admin(默认账号admin/admin)检查控制台是否正常运行。
  • 检查61616端口是否被占用:
    # Linux/macOS
    netstat -tulpn | grep 61616
    # Windows
    netstat -ano | findstr 61616
    

3. 确认ActiveMQ客户端依赖

确保WSO2的repository/components/lib目录下已添加以下ActiveMQ客户端jar包:

  • activemq-client-x.x.x.jar
  • activemq-jndi-x.x.x.jar
  • geronimo-jms_1.1_spec-x.x.jar
  • hawtbuf-x.x.x.jar

4. 检查队列存在性

确认ActiveMQ中已创建名为WajihsCheck的队列,可通过管理控制台的Queues页面查看。

5. 修正后的Endpoint配置

替换原Endpoint的uri为正确配置:

<address uri="jms:/WajihsCheck?transport.jms.ConnectionFactoryJNDIName=QueueConnectionFactory&amp;
              java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory&amp;
              java.naming.provider.url=tcp://localhost:61616&amp;transport.jms.DestinationType=queue"/>

内容的提问来源于stack exchange,提问作者Wajih Haider

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 04:40:34