Сообщения Websphere MQ - PullRequest
       4

Сообщения Websphere MQ

1 голос
/ 17 января 2012

У меня есть два общих вопроса о 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 Ответ

2 голосов
/ 17 января 2012

Я думаю, что вы используете "синхронный" неправильный путь. То, что вы описали в # 1 выше, верно: GET от MsgID получит только это одно сообщение. Однако это не пример синхронного обмена сообщениями.

Общий случай обмена клиент / сервер, который вы изложили, верен. Это общий шаблон, когда многие экземпляры приложений могут использовать одну и ту же очередь ответов, если они всегда ищут сообщения по идентификатору. Обычно происходит то, что MsgID копируется в идентификатор корреляции, хотя вместо инициализации msgID для объекта retrievedMessage можно ожидать инициализации correlID. Конечно, поведение полностью зависит от поведения серверного приложения, и некоторые действительно копируют запрос msgID в ответ msgID.

Просто убедитесь, что GET по msgID или correlID включает в себя ожидание, так что опоздавшему сообщению есть куда идти. Также с этим шаблоном, как правило, истекает срок ответов, если они не получены в течение некоторого периода времени, например часа или двух.

...