0

我们有两个通过 solace-mq 相互通信的 Java 应用程序。Component-1 使用 JMS Publisher 将 JSON 消息写入队列。Component-2 使用本地 Solace 消费者来消费它们。

问题是,Component-2 收到的消息在 JSON 打开花括号之前的消息开头包含无效字符。这是为什么?有没有其他人遇到过这个问题?

仅供参考,我们使用的客户端是 sol-jcsmp-7.1.2.230

4

1 回答 1

0

您要发送什么类型的 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。

于 2018-02-24T18:37:47.617 回答