所以我正在爲我的一臺服務器上安裝的消息隊列編寫一個看門狗。我有一個正在隊列中偵聽並處理消息的應用程序(第三方)。我現在想要對它進行計數,如果信息到達示例1500,我會發送一封電子郵件。所以我所有的代碼都可以工作,除了我需要關閉第三方應用程序才能使用消息隊列。我所做的是獲取所有存在的隊列名稱。工作正常。c#消息消息隊列計數。 - 由於隊列被打開而導致的共享衝突已被獨佔接收
public void GetPrivateQueues()
{
MessageQueue[] QueueList =
MessageQueue.GetPrivateQueuesByMachine(".");
foreach (MessageQueue queueItem in QueueList)
{
i++;
myPrivateQueues.Add(queueItem.Path);
Count(queueItem.Path);
}
return;
}
所以,當我做隊列的計數這樣
public void Count(String path)
{
MessageQueue queue = new MessageQueue(path);
MessageEnumerator messageEnumerator = queue.GetMessageEnumerator2();
int iii = 0;
while (messageEnumerator.MoveNext())
{
iii++;
}
myPrivateQueuesCount.Add(iii);
return;//i;
}
我得到的錯誤。
System.Messaging.MessageQueueException(0x80004005):由於隊列已被打開而導致共享衝突,以致於獨佔接收。
我該如何去閱讀隊列來進行計數而不試圖獲得對它的獨佔訪問。我只需要數一數。
謝謝
問候
你試過Peek嗎?但是要實現你想要的,你可能會更好地使用隊列名稱和性能計數器:https://stackoverflow.com/a/13139144/474702 – reckface
是的。我剛回到這裏更新併發布答案。我確實使用了性能計數器。所以我得到隊列名稱。修剪它,使其與性能計數器匹配,並且正在工作。 –