gpt4 book ai didi

java - MQ JMS 消息 ID 不返回文本消息以及如何以正确的格式编写 MQ JMSCorrelationID

转载 作者:太空宇宙 更新时间:2023-11-04 09:52:15 24 4
gpt4 key购买 nike

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

ID:414d51204243573032413154202020205bc6bd3e25423865

java.lang.RuntimeException: no text message

  1. 我使用 This is for Test 发送了 TextMessage,但为什么我没有收到 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());
}

最佳答案

这可能只是因为您的消息在队列中即将过期吗?

我看到您将消息过期时间设置为 2 秒。许多回复应用程序会将剩余的到期值复制到回复消息中。因此,如果读取请求并向您发送回复的应用程序在发送后 2 秒内没有读取您的请求,或者如果它读取了您的请求并在剩余期限内进行回复,并且回复没有让您重新使用它,那么它就会从队列中消失。

尝试将到期时间增加到更高的值。

<小时/>

另请注意,您通过两种不同的方法设置相同的到期值,一种是生产者发送的所有消息的默认值,另一种是每条消息的设置。

这为生产者发送的所有消息设置了默认过期时间:

queueSender.setTimeToLive(2*1000);

这会设置您发送的特定消息的到期时间,并将覆盖queueSender.setTimeToLive,因此您只需要其中一行。

textMessage.setJMSExpiration(2*1000);//message expiration

关于java - MQ JMS 消息 ID 不返回文本消息以及如何以正确的格式编写 MQ JMSCorrelationID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54570924/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com