【发布时间】: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仍然保持不变 --> 异步