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

从WSO2向ActiveMQ队列发送消息时遇请求终止报错求助

问题:WSO2 API向ActiveMQ发消息后请求无法正常结束,报JMS超时及空指针错误

问题场景与代码

使用以下WSO2 API配置向ActiveMQ队列发送消息:

<resource methods="GET">
     <inSequence>
            <log level="custom">
                <property name="Bashir bhhhh" value="Service"/>
            </log>
            <call>
                <endpoint key="check_ep"/>
            </call>
            <log level="custom">
                <property name="Bashir bhhhh" value="Service Ends"/>
            </log>
        </inSequence>
    </resource>

消息已成功投递到队列,但请求无法正常结束;手动在Postman终止请求时,出现以下错误日志:

ERROR {JMSSender} - Did not receive a JMS response within 30000 ms to destination : temp-queue://ID:IBM-PF3K6KLP-59783-1674314596400-1:2:1 with JMS correlation ID : ID:IBM-PF3K6KLP-59783-1674314596400-1:2:1:1:1
ERROR {Axis2Sender} - {api:finch} Unexpected error during sending message out java.lang.NullPointerException

原因分析

  • <call> mediator默认是同步调用模式,会强制等待后端返回响应,但ActiveMQ队列是单向消息传递,不会主动返回响应,因此WSO2会一直等待直到超时,导致请求长期挂起;手动终止请求时,未处理的等待逻辑触发空指针异常。
  • 你的场景是单向投递消息,不需要等待响应,同步调用模式不匹配需求。

解决方法

1. 替换<call>为<send> mediator

<send>是单向发送组件,发送完成后直接继续流程,不会等待响应。同时添加<respond>主动结束请求:

<resource methods="GET">
     <inSequence>
            <log level="custom">
                <property name="Bashir bhhhh" value="Service"/>
            </log>
            <send>
                <endpoint key="check_ep"/>
            </send>
            <log level="custom">
                <property name="Bashir bhhhh" value="Service Ends"/>
            </log>
            <!-- 主动向客户端返回响应,结束请求 -->
            <respond/>
        </inSequence>
    </resource>

2. 确认JMS端点为单向配置

检查check_ep端点,确保是单向队列发送,无请求-响应相关配置。示例单向JMS端点:

<endpoint xmlns="http://ws.apache.org/ns/synapse" name="check_ep">
    <address uri="jms:/YOUR_QUEUE_NAME?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"/>
</endpoint>

注意:不要配置replyTo、transport.jms.ReplyDestination等需要返回响应的参数。

3. 验证效果

重新部署修改后的API,调用后消息会正常投递到ActiveMQ队列,同时请求会立即返回响应,不会出现挂起或超时错误。

内容的提问来源于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.03 23:40:29