从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& java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory& java.naming.provider.url=tcp://localhost:8161/admin/queues.jsp&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.jaractivemq-jndi-x.x.x.jargeronimo-jms_1.1_spec-x.x.jarhawtbuf-x.x.x.jar
4. 检查队列存在性
确认ActiveMQ中已创建名为WajihsCheck的队列,可通过管理控制台的Queues页面查看。
5. 修正后的Endpoint配置
替换原Endpoint的uri为正确配置:
<address uri="jms:/WajihsCheck?transport.jms.ConnectionFactoryJNDIName=QueueConnectionFactory& java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory& java.naming.provider.url=tcp://localhost:61616&transport.jms.DestinationType=queue"/>
内容的提问来源于stack exchange,提问作者Wajih Haider
相关产品推荐
相关产品推荐

