我有一個隊列表,我希望能夠檢索消息。然後我需要以某種方式處理它們(不在範圍內),然後將它們從隊列中移除。獨家訪問從Websphere MQ 7讀取消息,然後將其刪除
我試着創建2個隊列,一個瀏覽消息,一個消息處理後刪除消息。
MQQueue browseQueue = qMgr.AccessQueue(QUEUE_NAME, MQC.MQOO_BROWSE);
MQGetMessageOptions browseOptions = new MQGetMessageOptions()
{
Options = MQC.MQGMO_WAIT | MQC.MQPMO_FAIL_IF_QUIESCING | MQC.MQGMO_BROWSE_NEXT,
WaitInterval = MQC.MQWI_UNLIMITED
};
MQQueue acknowledgeQueue = qMgr.AccessQueue(QUEUE_NAME, MQC.MQOO_INPUT_AS_Q_DEF);
MQGetMessageOptions acknowledgeOptions = new MQGetMessageOptions()
{
Options = MQC.MQGMO_WAIT | MQC.MQPMO_FAIL_IF_QUIESCING | MQC.MQMO_MATCH_MSG_ID,
WaitInterval = MQC.MQWI_UNLIMITED
};
while (keepRunning.WaitOne(0))
{
MQMessage browseMessage = new MQMessage();
try
{
browseQueue.Get(browseMessage, browseOptions);
}
catch (MQException mqexe)
{
throw;
}
if (browseMessage.MessageType != ShutDown.TYPE)
{
object o = browseMessage.ReadObject();
Console.WriteLine("The message is: {0}", o);
}
browseMessage.ClearMessage();
MQMessage acknowledgeMessage = new MQMessage()
{
MessageId = browseMessage.MessageId
};
acknowledgeQueue.Get(acknowledgeMessage, acknowledgeOptions);
}
但我需要確保沒有其他進程可以訪問相同的消息。因爲,我依靠使用2個隊列,我不知道該怎麼做。
這會防止另一個線程訪問相同的消息,該消息已被檢索'queue.Get(receiveMsg,GMO)之後;'但經理之前COMMITED? –
是的,在得到消息後,它不可用於其他線程,直到它被退出(假設它已退出)。 –