如何使用 C# 识别私有消息队列 (MSMQ) 是否超出其消息存储限制?

How to identify if a private message queue (MSMQ) has exceeded its message storage limit using C#?

有没有一种方法可以使用 C# 来识别私有 MSMQ 是否已超出其存储限制 (KB)?

在以下示例中,我使用计算机管理控制台创建了一个私有 MSMQ,并将存储限制设置为 100 KB。

我使用一个简单的 c# 程序将消息发送到队列,该程序运行良好。我希望能够确定何时达到限制以停止发送消息。

MessageQueue msgQ =new MessageQueue(".\Private$\name_of_queue");
msgQ.Send(msg);

队列的最大大小

使用 MessageQueue.MaximumQueueSize Property 获取队列的最大大小。

The maximum size, in kilobytes, of the queue. The Message Queuing default specifies that no limit exists.

所以,像这样的东西应该可以工作:

var msgQ = new MessageQueue(".\Private$\name_of_queue");
long size = msgQ.MaximumQueueSize;

队列大小

使用PerformanceCounter获取队列的当前大小:

var bytesCounter = new PerformanceCounter( 
    "MSMQ Queue", 
    "Bytes in Queue", 
    Environment.MachineName + "\private$\queue-name");

看起来有两个不同的查询来获取当前队列的大小:

Query Description
Bytes in Queue Shows the total number of bytes that currently reside in the queue. For the computer queue instance, this represents the dead letter queue.
Bytes in Journal Queue Shows the total number of bytes that reside in the journal queue. For the computer queue instance, this represents the computer journal queue.

上述查询是在 MSDN 上 MSMQ Queue Object 现已弃用的部分中找到的。但是,我相信查询仍然有效。