【问题标题】:Websphere MQ messagesWebsphere MQ 消息
【发布时间】:2012-01-16 22:38:40
【问题描述】:

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

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);
}

【问题讨论】:

  • Mq_queue 默认指定为异步,一方面是生产者 --> 通道 --> 消费者,如果您创建了两个单独的通道 put_channel 和 get_channel,则第二个示例对于数据流来说会很舒服,但是 message_flow仍然保持不变 --> 异步

标签: java ibm-mq


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2011-03-28
    • 2010-09-21
    • 1970-01-01
    • 2011-12-16
    • 1970-01-01
    • 2011-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多