java - MQ JMS 消息 ID 不返回文本消息以及如何以正确格式编写 MQ JMSCorrelationID
问题描述
我测试了一个将 a 传递给 IBM MQ 上的队列的独立 JMS 客户端TextMessage
,我得到了以下错误消息 ID:
编号:414d51204243573032413154202020205bc6bd3e25423865
java.lang.RuntimeException:没有短信
- 我发送了一个
TextMessage
withThis is for Test
,但为什么我没有收到一个TextMessage
?在此代码运行之前,队列中没有其他消息。 - 如果短信成功,如何在 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());
}
解决方案
在您的请求-回复用例中,请求客户端发送的消息类型与其将接收的消息类型没有直接关系。请求客户端接收的消息类型取决于响应客户端发送的消息。
至于String
从 IBM MQ 实现中获取消息 ID,您可以参考这个答案。
推荐阅读
- angular - 从 ngxs 商店读取
- python - 使用其他模型的属性作为默认值
- laravel - Laravel livewire 和 vuejs 无限滚动
- flutter - Flutter 中受密码保护的 AlertDialog
- python - 使用超时设置从子进程捕获输出
- docker - docker compose 启动的一些容器如何管理
- nginx - 如何配置 localhost nginx 以代理 https 远程后端
- python - 我如何得到这个值的东西?
- jquery - 没有得到“数量”和“总计”的价值
- go - 如何在并发 goroutine 中超时(截止日期)后“继续”?