gpt4 book ai didi

java - Websphere MQ 消息

转载 作者:行者123 更新时间:2023-11-30 04:54:46 25 4
gpt4 key购买 nike

我对 Websphere MQ 有两个关于 messageId 的一般性问题:

1)这个字段可以用来实现队列中的同步通信吗?例如下面的源代码:

MQMessage hello_world = new MQMessage(); 
hello_world.writeUTF("Hello World!");
MQPutMessageOptions pmo = new MQPutMessageOptions();
system_default_local_queue.put(hello_world,pmo);
MQMessage retrievedMessage = new MQMessage();
retrievedMessage.messageId = hello_world.messageId;
MQGetMessageOptions gmo = new MQGetMessageOptions();
system_default_local_queue.get(retrievedMessage, gmo);

检索到的消息将是 hello_world 消息的准确响应,并且只会检索此消息,而将所有其他消息留在队列中,即使存在比此更久的消息?

2)如果是这种情况,可以用两个队列来完成吗?例子:客户端:

MQMessage hello_world = new MQMessage(); 
hello_world.writeUTF("Hello World!");
MQPutMessageOptions pmo = new MQPutMessageOptions();
input_queue.put(hello_world,pmo);
MQMessage retrievedMessage = new MQMessage();
retrievedMessage.messageId = hello_world.messageId;
MQGetMessageOptions gmo = new MQGetMessageOptions();
output_queue.get(retrievedMessage, gmo);

服务器端:

while(true){
MQMessage inMessage= new MQMessage();
input_queue.get(mqMessage ,gmo);
//actions to get the contents of the inMessage and create proper response
MQMessage outMessage= new MQMessage();
//write the proper response to outMessage
outMessage.messageId = inMessage.messageId;
output_queue.put(outMessage, pmo);
}

最佳答案

我认为您使用“同步”的方式是错误的。您在上面 #1 中描述的是正确的 - 通过 MsgID 的 GET 将仅检索该一条消息。但是,这不是同步消息传递示例。

您概述的客户端/服务器交换的一般情况是正确的。这是一种常见的模式,如果许多应用程序实例始终按 ID 查找消息,则它们可以使用相同的回复队列。通常情况下,MsgID 会被复制到 Correlation ID,因此我们不会在 retrievedMessage 对象上初始化 msgID,而是希望看到 correlID code> 已初始化。当然,该行为完全取决于服务器应用程序的行为,有些应用程序会将请求 msgID 复制到回复 msgID

只需确保 msgIDcorrelID 的 GET 包含等待,以便迟到的消息有地方可去。同样,在这种模式下,如果在某个时间范围(例如一两个小时)内没有收到回复,回复就会过期,这是很常见的。

关于java - Websphere MQ 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8887300/

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