首页 > 解决方案 > MQ JMS 消息 ID 不返回文本消息以及如何以正确格式编写 MQ JMSCorrelationID

问题描述

我测试了一个将 a 传递给 IBM MQ 上的队列的独立 JMS 客户端TextMessage,我得到了以下错误消息 ID:

编号:414d51204243573032413154202020205bc6bd3e25423865

java.lang.RuntimeException:没有短信

  1. 我发送了一个TextMessagewith This is for Test,但为什么我没有收到一个TextMessage?在此代码运行之前,队列中没有其他消息。
  2. 如果短信成功,如何在 Java 中以可读格式读取消息 ID(发送请求 MessageID 和回复消息 ID)。我需要在下面的代码中更改什么吗?
TextMessage textMessage = queueSession.createTextMessage("This is for Test");
textMessage.setJMSReplyTo(queue);
textMessage.setJMSType("mcd://xmlns");//message type
textMessage.setJMSExpiration(2*1000);//message expiration
textMessage.setJMSDeliveryMode(DeliveryMode.PERSISTENT); 
queueSender = queueSession.createSender(queueSession.createQueue(outputQName));
queueSender.setTimeToLive(2*1000);
queueSender.send(textMessage);

String jmsCorrelationID = " JMSCorrelationID = '" + textMessage.getJMSMessageID() + "'";
while (true) {                        
    Message message = queueReceiver.receive(60*1000);
    if (! (message instanceof TextMessage))
        throw new RuntimeException("no text message");
    TextMessage tm = (TextMessage) message;
    System.out.println("Message:"+tm.getText());  
}

标签: javajmsibm-mq

解决方案


在您的请求-回复用例中,请求客户端发送的消息类型与其将接收的消息类型没有直接关系。请求客户端接收的消息类型取决于响应客户端发送的消息。

至于String从 IBM MQ 实现中获取消息 ID,您可以参考这个答案


推荐阅读