如何在 ActiveMQ 上发布 JSON 对象
How to Publish JSON Object on ActiveMQ
我正在尝试将 JSON 消息(对象)发布到 ActiveMQ queue/topic。
目前我正在将 JSON 对象转换为 String 然后发布它。
但我不想将它转换成 String.I 不想将它转换成字符串而不是我想按原样发送的 JSON 对象作为消息。
下面是我的代码
public void sendMessage(final JSONObject msg) {
logger.info("Producer sends---> " + msg);
jmsTemplate.send(destination, new MessageCreator() {
public Message createMessage(Session session) throws JMSException {
String s = msg.toString();
return session.createTextMessage(s);
// createTextMessage(msg);
}
});
}
在队列中使用文本是最佳实践,因为您将能够更轻松地进行调试,并且不会受限于完全相同的 language/framework 甚至双方应用程序的库版本队列中。
如果你真的想要这种硬耦合(即当你在单个应用程序中使用队列并且不需要在队列上手动检查消息时)你可以这样做:
而不是return session.createTextMessage(s);
做return session.createObjectMessage(msg);
还有一件事:请注意,如果您不能 100% 控制发布消息的代码,则使用 JMS ObjectMessage 可能会导致安全问题。因此,这在默认的 ActiveMQ 设置中是不允许的。您需要在客户端和服务器设置中启用它。作为参考,请参阅此页面:http://activemq.apache.org/objectmessage.html
我正在尝试将 JSON 消息(对象)发布到 ActiveMQ queue/topic。 目前我正在将 JSON 对象转换为 String 然后发布它。 但我不想将它转换成 String.I 不想将它转换成字符串而不是我想按原样发送的 JSON 对象作为消息。
下面是我的代码
public void sendMessage(final JSONObject msg) {
logger.info("Producer sends---> " + msg);
jmsTemplate.send(destination, new MessageCreator() {
public Message createMessage(Session session) throws JMSException {
String s = msg.toString();
return session.createTextMessage(s);
// createTextMessage(msg);
}
});
}
在队列中使用文本是最佳实践,因为您将能够更轻松地进行调试,并且不会受限于完全相同的 language/framework 甚至双方应用程序的库版本队列中。
如果你真的想要这种硬耦合(即当你在单个应用程序中使用队列并且不需要在队列上手动检查消息时)你可以这样做:
而不是return session.createTextMessage(s);
做return session.createObjectMessage(msg);
还有一件事:请注意,如果您不能 100% 控制发布消息的代码,则使用 JMS ObjectMessage 可能会导致安全问题。因此,这在默认的 ActiveMQ 设置中是不允许的。您需要在客户端和服务器设置中启用它。作为参考,请参阅此页面:http://activemq.apache.org/objectmessage.html