所以我正忙着在我的一台服务器上安装一个Watchdog for message queue。我有一个正在侦听队列并处理消息的应用程序(第三方)。我现在想要对它进行计数,如果消息达到示例1500,我发送电子邮件。所以我的所有代码都有效,除了我需要关闭第三方应用程序以使用消息队列。我所做的是获取所有存在的队列名称。工作正常。
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):队列被打开已导致独占接收导致共享冲突。
如何在不尝试获取独占访问权限的情况下读取队列进行计数。我只需要数数吧。
谢谢
此致
答案 0 :(得分:0)
我使用性能计数器来读取队列。 现在像个梦一样工作!
添加了catch异常。这是在队列为空时。我写了一个0.性能计数器给出了空白队列的错误。
public void Count(String path)
{
path = path.Remove(0, 21);
try
{
PerformanceCounter queueCounter = new PerformanceCounter(
"MSMQ Queue",
"Messages in Queue",
@path);
Console.WriteLine("Queue contains {0} messages",
queueCounter.NextValue().ToString());
myPrivateQueuesCount.Add((int)queueCounter.NextValue());
}
catch (Exception exc)
{
myPrivateQueuesCount.Add(0);
}
return;
}