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

WSO2 MI中无法读取ActiveMQ队列消息,求本地打印数据方法

问题描述
  • 从ActiveMQ队列读取消息时,消息已在ActiveMQ中出队,但后端无法读取,需指导如何在本地机器读取/打印数据。
  • 运行WSO2 MI服务器时触发如下错误:

Unknown error processing message org.apache.axiom.om.OMException: com.ctc.wstx.exc.WstxUnexpectedCharException:
Unexpected character '{' (code 123) in prolog; expected '<'
at [row,col {unknown-source}]: [1,1]

配置的代理服务代码
<proxy name="Listen_Queue" startOnLoad="true" transports="jms" xmlns="http://ws.apache.org/ns/synapse">
<target>
    <inSequence>
        <log level="full">
            <property name="MSG" value="Receiving messages from Queue" />
        </log>
        <property action="set" name="OUT_ONLY" value="true"/>
        <drop />
    </inSequence>
    <faultSequence />
</target>
<parameter name="transport.jms.Destination">WajihsCheck</parameter>
<parameter name="redeliveryPolicy.redeliveryDelay">2000</parameter>
<parameter name="transport.jms.ContentType">json</parameter>
<parameter name="transport.jms.ConnectionFactory">myQueueListener</parameter>
<parameter name="transport.jms.CacheLevel">consumer</parameter>
</proxy>
解决方案及操作指导

1. 先修复WSO2 MI的消息解析错误

错误原因是JSON格式消息被默认当作XML解析,即便配置了transport.jms.ContentType为json,仍需额外处理:

  • 检查ActiveMQ中消息的JMSType属性是否设为json,未设置的话,WSO2 MI会默认按XML解析。
  • 在代理的inSequence中强制指定消息类型,添加以下配置到log标签之后:
<property name="messageType" value="application/json" scope="axis2"/>

2. 本地读取/打印队列消息的三种方法

方法一:通过WSO2 MI日志完整输出

修改inSequence,保留消息并确保日志能打印完整内容,如需转发到后端则移除drop标签,添加send动作:

<inSequence>
    <log level="full">
        <property name="MSG" value="Receiving messages from Queue" />
    </log>
    <property action="set" name="OUT_ONLY" value="true"/>
    <!-- 强制指定消息类型为JSON -->
    <property name="messageType" value="application/json" scope="axis2"/>
    <!-- 如需转发到后端,取消下方send标签注释,替换为实际后端地址 -->
    <!-- <send>
        <endpoint>
            <address uri="http://你的后端服务地址"/>
        </endpoint>
    </send> -->
    <!-- 仅本地打印的话,移除drop标签 -->
    <!-- <drop /> -->
</inSequence>
启动WSO2 MI后,查看`repository/logs/wso2carbon.log`即可获取完整消息内容。

### 方法二:使用ActiveMQ自带工具
- 登录ActiveMQ控制台(默认地址`http://localhost:8161`),进入Queues页面找到`WajihsCheck`队列,点击队列名进入详情页,用**Browse**功能查看消息内容(适用于未出队的消息)。
- 或使用命令行工具执行:
```bash
activemq browse --amqurl tcp://localhost:61616 WajihsCheck

直接打印队列中的消息内容。

方法三:编写简单Java客户端读取

使用ActiveMQ Java API编写程序读取并打印消息:

import org.apache.activemq.ActiveMQConnectionFactory;
import javax.jms.*;

public class QueueReader {
    public static void main(String[] args) throws JMSException {
        String brokerUrl = "tcp://localhost:61616";
        String queueName = "WajihsCheck";

        ConnectionFactory factory = new ActiveMQConnectionFactory(brokerUrl);
        Connection connection = factory.createConnection();
        connection.start();

        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        Destination destination = session.createQueue(queueName);
        MessageConsumer consumer = session.createConsumer(destination);

        consumer.setMessageListener(message -> {
            try {
                if (message instanceof TextMessage) {
                    TextMessage textMessage = (TextMessage) message;
                    System.out.println("Received message: " + textMessage.getText());
                }
            } catch (JMSException e) {
                e.printStackTrace();
            }
        });

        // 保持程序运行60秒,等待接收消息
        try {
            Thread.sleep(60000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        consumer.close();
        session.close();
        connection.close();
    }
}

需引入ActiveMQ依赖:

<dependency>
    <groupId>org.apache.activemq</groupId>
    <artifactId>activemq-client</artifactId>
    <version>5.16.5</version>
</dependency>

3. 后端接收问题排查

  • 确认后端服务正常运行,且支持接收JSON格式请求。
  • 测试WSO2 MI到后端的网络连通性,用telnet或curl验证后端地址可达。
  • 在WSO2 MI的faultSequence中添加日志,排查转发错误:
<faultSequence>
    <log level="full">
        <property name="ERROR" value="Error processing message" />
    </log>
</faultSequence>

内容的提问来源于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.12 08:25:21