IBM MQ发送消息

时间:2018-03-06 04:20:32

标签: java jms ibm-mq

我可以通过Java Test类发送消息。能够在控制台中看到字符串消息。但是在日志中更新它时,我得到一个空响应。我收到此错误"无效的需求代码"。任何人都可以帮我这个吗?

任何人都可以建议我如何从JMSTextMessage转换为JMSBytesMessage

IBM MQ Send Bytes消息通过Java Test 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");
    }
  }
}

1 个答案:

答案 0 :(得分:0)

以下两个方法演示了如何在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编码来编码文本。任何其他人都会做;只需使用相同的字符集进行读写。您甚至可以通过将charset name作为消息的字符串属性发送来参数化charset(与HTTP charset参数的想法相同)。

在处理TextMessages时,IBM MQ将隐式执行消息转换和编码。大多数情况下这是不受欢迎的行为,因为它不会很好地处理unicode字符。此转换的规则将在here中进行说明。要避免此行为,请使用BytesMessages传递文本。

那么如何将TextMessage转换为BytesMessage?

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