使用COM可以获得队列的MessageCount属性。我可以用MSMQ.Interop实现同样的功能,但我想知道是否有任何方法可以用纯.NET方法来实现这一点?如何从.NET中的MSMQ队列获取MessageCount?
1
A
回答
0
当然,使用WMI:
Select * From Win32_PerfRawData_MSMQ_MSMQQueue
+0
不幸的是,当使用这个方法将队列名称截断为64个字符,对于大多数情况下,可以使此选项不可用。请参阅:http://connect.microsoft.com/VisualStudio/feedback/details/91525/system-daignostics-performancecounter-fails-when-using-instance-name-64-characters – 2012-05-10 00:03:01
0
当然!您可以使用LINQ它快速和简单
int Total = 0;
using (var queue = new MessageQueue("queue_name", QueueAccessMode.ReceiveAndAdmin))
{
Total = (from Message msg in queue
select msg).Count();
}
0
这是计算私人队列内消息的最快方法。
//using System.Diagnostics
int messageCount =0;
private MessageQueue[] privatequeuelist = MessageQueue.GetPrivateQueuesByMachine(Dns.GetHostName());
foreach(var Queue in MessageQueue)
{
string fullyQualifiedQueueName = string.Format(@"{0}\{1}", Environment.MachineName, Queue.QueueName);
PerformanceCounterCategory category = new PerformanceCounterCategory("MSMQ Queue");
PerformanceCounter cntr = new PerformanceCounter("MSMQ Queue", "Messages in Queue");
if (category.InstanceExists(fullyQualifiedQueueName.ToLower()))
{
cntr.InstanceName = fullyQualifiedQueueName.ToLower(CultureInfo.CurrentCulture);
messageCount = (int)cntr.NextValue();
}
Console.WriteLine(Queue.QueueName + "===" + messageCount);
}
Console.ReadLine();
相关问题
- 1. MSMQ:从远程计算机的MSMQ队列中获取消息的计数
- 2. MSMQ - 按路径获取特定队列
- 3. 使用WMI和C获取MSMQ队列#
- 4. MSMQ获取所有私人队列
- 5. MSMQ缓慢队列读取
- 6. 如何获取MSMQ专用队列的当前权限?
- 7. 消息如何从msmq中的毒队列中清除
- 8. 收听msmq队列
- 9. Redis队列vs MSMQ
- 10. 找出哪个程序从给定的MSMQ队列中读取
- 11. 如何创建从MSMQ消息队列中读取的IObservable <T>?
- 12. 如何重命名MSMQ队列
- 13. 如何获取队列名称NServiceBus从
- 14. msmq的临时队列
- 15. MSMQ服务不读取队列
- 16. 从MSMQ日志中读取消息队列发送时间
- 17. 如何以编程方式读取MSMQ队列上的权限?
- 18. 无法获取MSMQ Com来查找我的队列
- 19. 我该如何订阅MSMQ队列,但只能“浏览”.Net中的消息?
- 20. MSMQ中不同类型的队列
- 21. 编辑队列中的MSMQ消息
- 22. MSMQ消息从出站队列中消失,但从未到达入站队列
- 23. MSMQ专用队列限制
- 24. MSMQ作为工作队列
- 25. 监视MSMQ消息队列
- 26. MSMQ身份验证队列
- 27. 删除MSMQ队列权限
- 28. 如何从OSB读取MSMQ
- 29. 如何从团队中获取团队用户从输入中获取
- 30. .net不是MSMQ的消息队列解决方案
不幸的是微软在这里搞砸了,忘了实现一个MessageQueue.MessageCount属性。 .NET中唯一的API是.GetAllMessages()方法,但如果队列中有成千上万条消息,则这会提供非常差的性能。目前唯一真正的选择是WMI,COM,或者在增加计数器的同时实现自己的枚举和窥探消息的自定义技术。这里提到了一些替代方法:http://stackoverflow.com/questions/3869022/is-there-a-way-to-check-how-many-messages-are-in-a-msmq-queue – 2012-05-09 23:54:16