簡體   English   中英

IBM MQ發送消息

[英]IBM MQ Send message

我可以通過Java Test類發送消息。 能夠在控制台中看到字符串消息。 但是在日志中更新它時,我得到的響應為空。 我收到此錯誤“無效的需求代碼”。 誰能幫我這個?

誰能建議我如何從JMSTextMessage轉換為JMSBytesMessage

IBM MQ通過Java測試類發送字節消息。

任何幫助都會有所幫助

      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字符集參數相同)。

在處理TextMessages時,IBM MQ將隱式地進行消息轉換和編碼。 在大多數情況下,這是不良行為,因為它將無法很好地處理Unicode字符。 此轉換的規則在此處描述。 為避免此行為,請使用BytesMessages傳遞文本。

那么如何將TextMessage轉換為BytesMessage?

從TextMessage讀取文本。 比將其作為新的BytesMessage發送。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM