IBM MQ 发送消息

IBM MQ Send message

我可以通过 Java 测试 class 发送消息。能够在控制台中看到字符串消息。但是在日志中更新它时,我得到了一个空响应。我收到此错误 "Invalid Demand Code"。谁能帮我解决这个问题?

谁能建议我如何将 JMSTextMessage 转换为 JMSBytesMessage

IBM MQ 通过 Java 测试 Class 发送字节消息。

任何帮助都会有帮助

      MQQueueConnectionFactory cf = new MQQueueConnectionFactory();
      cf.setHostName("");
      cf.setPort();
      cf.setTransportType(JMSC.MQJMS_TP_CLIENT_MQ_TCPIP);
      cf.setQueueManager("");
      cf.setChannel("");

      MQQueueConnection connection = (MQQueueConnection) cf.createQueueConnection();
      MQQueueSession session = (MQQueueSession) connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
      MQQueue queue = (MQQueue) session.createQueue("");
      MQQueueSender sender =  (MQQueueSender) session.createSender(queue);

      long uniqueNumber = System.currentTimeMillis() % 1000;

      JMSTextMessage message = (JMSTextMessage) session.createTextMessage("B+VCTR||*RPI/LAX/8548|16MAR+B+"); 

      connection.start();

      System.out.println("before Sent message:\n" + message);

      sender.send(message);
      System.out.println("Sent message:\n" + message);

      sender.close();
      session.close();
      connection.close();

      System.out.println("\nSUCCESS\n");
    }
    catch (JMSException jmsex) {
      System.out.println(jmsex);
      System.out.println("\nFAILURE2\n");
    }
    catch (Exception ex) {
      System.out.println(ex);
      System.out.println("\nFAILURE1\n");
    }
  }
}

以下两种方法演示如何在 BytesMessage 中传递 UTF-8 编码的文本:

Message createBytesMessage(Session session, String text) throws JMSException {
    Charset charset = Charset.forName("UTF-8"); 
    byte[] data = text.getBytes(charset);

    BytesMessage bmsg = session.createBytesMessage();
    bmsg.writeBytes(data);
    return bmsg;
}

String readBytesMessage(BytesMessage bmsg) throws JMSException {
    int len = (int) bmsg.getBodyLength();
    byte[] data = new byte[len];
    bmsg.readBytes(data);

    Charset charset = Charset.forName("UTF-8");
    String text = new String(data, charset);
    return text;
}

本质上,BytesMessage 用于发送字节数组。要使用 BytesMessages 传递文本,首先要将文本转换为字节。这里我使用了 UTF-8 编码来对文本进行编码。任何其他人都可以;只需使用相同的字符集进行读写。您甚至可以通过将字符集名称作为消息的字符串 属性 发送来参数化字符集(与 HTTP 字符集参数相同的想法)。

在处理 TextMessage 时,IBM MQ 将隐式进行消息转换和编码。大多数情况下,这是不需要的行为,因为它不能很好地处理 unicode 字符。 here 描述了这种转换的规则。要避免此行为,请使用 BytesMessages 来传递文本。

那么如何将TextMessage转成BytesMessage呢?

从 TextMessage 读取文本。比将其作为新的 BytesMessage 发送。