我想知道是否有办法以编程方式检查使用C#在私有或公共MSMQ中有多少消息?我有代码,使用try/catch中包含的peek方法检查队列是否为空,但我从未见过有关显示队列中消息数的任何信息.这对于监视是否正在备份队列非常有用.
我有一个调用来获取失败的 MSMQ 的计数。
经过一番研究,我发现了这个问题:Reading MSMQ message count with ruby
那里的答案表明,如果队列为空且已关闭,则您无法获得“性能指标”(包括消息计数)。
所以我现在的问题是,如何使用 .NET 和 C# 以编程方式“打开”(即“取消关闭”)MSMQ?
更新:如果相关,这是我获取消息计数的代码:
private static int GetMessageCount(string queueName, string machine)
{
MSMQManagement queue = new MSMQManagement();
string formatName = @"DIRECT=OS:" + machine + @"\PRIVATE$\" + queueName;
queue.Init(machine, null, formatName);
return queue.MessageCount;
}
Run Code Online (Sandbox Code Playgroud)
错误发生在queue.Init。错误消息是:“队列未打开或可能不存在。”
此代码在设置相同(但不为空)的另一个队列上运行良好。