我们有两个通过 solace-mq 相互通信的 Java 应用程序。Component-1 使用 JMS Publisher 将 JSON 消息写入队列。Component-2 使用本地 Solace 消费者来消费它们。
问题是,Component-2 收到的消息在 JSON 打开花括号之前的消息开头包含无效字符。这是为什么?有没有其他人遇到过这个问题?
仅供参考,我们使用的客户端是 sol-jcsmp-7.1.2.230
您要发送什么类型的 JMS 消息以及如何设置有效负载?另外,您如何在消费者应用程序中提取有效负载?
根据您在 JMS 应用程序中创建的消息类型,当通过 Solace 原生 Java API 接收时,有效负载可能会编码在消息的不同部分中。对于 JMS TextMessage
,它将位于消息的 XML 内容部分(除非您将 JMS 连接工厂设置text-msg-xml-payload
设置为 false),而对于 JMS BytesMessage
,它将位于消息的二进制部分。
要在开放 API 和协议之间交换消息时正确提取有效负载,请在消息接收回调XMLMessageLister.onReceive()
方法中执行以下操作:
@Override
public void onReceive(BytesXMLMessage msg) {
String messagePayload = "";
if(msg.hasContent()) {
// XML content part
byte[] contentBytes = new byte[msg.getContentLength()];
msg.readContentBytes(contentBytes);
messagePayload = new String(contentBytes);
} else if(msg.hasAttachment()) {
// Binary attachment part
ByteBuffer buffer = msg.getAttachmentByteBuffer();
messagePayload = new String(buffer.array());
}
// Do something with the messagePayload like
// convert the String back to a JSON object
System.out.println("Message received: " + messagePayload);
}
如果从 Solace 本机 API 发送到 JMS 消费者应用程序,另请参阅以下文档:https ://docs.solace.com/Solace-JMS-API/Creating-JMS-Compatible-Msgs.htm。