0
即使消息不是隊列中的第一個,我是否可以通過其CorrelationId過濾並從隊列中獲取消息?客戶端過濾消息通過CorrelationId
即使消息不是隊列中的第一個,我是否可以通過其CorrelationId過濾並從隊列中獲取消息?客戶端過濾消息通過CorrelationId
是的。您必須在MQGetMessageOptions
上使用MQGMO_MATCH_CORREL_ID
匹配選項。
MQMessage getMsg = new MQMessage();
MQGetMessageOptions gmo = new MQGetMessageOptions();
gmo.MatchOptions = MQC.MQMO_MATCH_CORREL_ID;
// Copy correlationID of the message you want to receive
getMsg.CorrelationId = correlationId;
queue.Get(getMsg, gmo);
編輯:
的correlationID用於涉及兩個消息,通常是請求和應答消息。所以這樣做。
1)客戶端應用程序發送請求消息。發送消息後緩存發送消息的messageId。
2)將此messageId用作消息選擇的correlationId。
recvdResponseMsg.CorrelationId = requestMsg.MessageId;
gmo.MatchOptions = MQC.MQMO_MATCH_CORREL_ID;
3)在所述服務器應用(其處理請求消息),發送響應消息時,只複製請求消息發送到響應消息的的correlationID的MESSAGEID。
responseMsg.CorrelationId = requestMsg.MessageId;
謝謝你的回答。如果我在發送消息之前設置了MQC.MQRO_COPY_MSG_ID_TO_CORREL_ID選項,而不是getMsg.CorrelationId = correlationId ;? – sada 2012-08-16 06:02:43
請參閱我上面的編輯。 – Shashi 2012-08-16 07:16:01
非常感謝。 – sada 2012-08-17 19:49:11