【问题标题】:Convert JSON message to javax.jms.ObjectMessage in ActiveMq在 ActiveMq 中将 JSON 消息转换为 javax.jms.ObjectMessage
【发布时间】:2026-02-12 23:00:02
【问题描述】:

我有一个 ActimeMQ 消费者,它需要 javax.jms.ObjectMessage 格式的消息。 此消息 pojo 有 5 个字符串元素。

现在我正在尝试在 NodeJs 中为这个消费者编写一个消息生产者。 我正在使用stompit 模块

我当前的 NodeJs 代码是

stompit.connect(connectOptions, function(error, client) {

if (error) {
    console.log('connect error ' + error.message);
    return;
} else {
    console.log("connected");
}

var sendHeaders = {
    'destination': '/queue/test',

    'transformation': 'jms-object-json'
};
var msg = new Object();
msg.val1 = "12";
msg.val2 = "test";
msg.val3 = "1";
msg.val4 = "1";
msg.val5 = "Y";
var frame = client.send(sendHeaders);
frame.write(JSON.stringify(msg));
frame.end();

}); Java 消费者能够获取消息但抛出异常

org.apache.activemq.command.ActiveMQTextMessage 无法转换为 javax.jms.ObjectMessage

我从 activeMQ 读到了这个page,上面写着

目前,ActiveMQ 带有一个转换器,可以将 XML/JSON 文本转换为 Java 对象,但您也可以添加自己的转换器

我不太了解如何转换数据的这一部分。

我在 apache-activemq-5.15.0\lib 中添加了 xstream-1.4.10.jar 和 jettison-1.3.8.jar 并重新启动了 ActiveMq 服务器。 但我仍然得到消费者的错误。 同样在 ActiveMQ 控制台 -> 队列 -> 消息属性中,它显示转换错误

请告诉我如何在此 ActiveMQTextMessage 类型到达消费者之前将其转换为 javax.jms.ObjectMessage

【问题讨论】:

    标签: java node.js activemq


    【解决方案1】:

    ActiveMQ 中没有将任何随机 JSON 字符串转换为 ObjectMessage 的转换器,您必须自己编写来处理您发送的任何格式。 ActiveMQ 中的转换器将从 JSON 转换 Map 的一些基本类型,但它很棘手且不一定可靠。您最好自己处理 TextMessage 并使用 JSON 做一些有意义的事情。

    【讨论】:

    • 那么这个转换'jms-object-json'做了什么?而在activemq网站上“ActiveMQ自带一个可以将XML/JSON文本转换为Java对象的转换器”这句话是什么意思?
    【解决方案2】:

    ActiveMQTextMessage 和 ObjectMessage 不同,它们不能相互转换。

    从 ActiveMQTextMessage 中,你可以得到真正的消息内容作为一个字符串,然后你必须自己将它转换成一个 json 对象。

    【讨论】: