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 –
0
물론! 이 개인 큐 내부 메시지를 계산하는 가장 빠른 방법은 빠르고
int Total = 0;
using (var queue = new MessageQueue("queue_name", QueueAccessMode.ReceiveAndAdmin))
{
Total = (from Message msg in queue
select msg).Count();
}
0
간단 LINQ를 사용할 수 있습니다.
//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. WCF를 사용하여 MSMQ 대기열에서 XML 메시지를 받습니까?
- 2. 요청 본문은 어떻게 받습니까?
- 3. MSMQ 경쟁 소비자
- 4. RSS 피드의 날짜는 어떻게 받습니까?
- 5. 각 인보이스의 가격은 어떻게 받습니까?
- 6. Google지도의 위도와 경도는 어떻게 받습니까?
- 7. sqlite 데이터베이스의 백업은 어떻게 받습니까?
- 8. 다음 형식의 데이터는 어떻게 받습니까?
- 9. Facebook 사용자의 앨범은 어떻게 받습니까?
- 10. TCustomControl은 입력 포커스를 어떻게 받습니까?
- 11. iPod/iPhone의 UDID는 어떻게 받습니까?
- 12. javascript/Node.js에서 시간을 어떻게 받습니까?
- 13. AutoIt에서 키보드 입력은 어떻게 받습니까?
- 14. 특정 국가의 시간대는 어떻게 받습니까?
- 15. Java 클래스는 어떻게 입력을 받습니까?
- 16. MSMQ 성능 카운터는 어떻게 구합니까?
- 17. POSIX 대기열에서 메시지를받을 때 어떻게 메모리를 절약합니까?
- 18. .net의 BasePage.GeneratePassword는 어떻게 작동합니까?
- 19. Wix 및 MSMQ : MSMQ 검색
- 20. WCF MSMQ 소비자 스레드 수
- 21. 위키 백과 페이지의 하위 집합은 어떻게 받습니까?
- 22. Android에서 애플리케이션의 버전 번호는 어떻게 받습니까?
- 23. USPS - API를 통해 국제 배송료는 어떻게 받습니까?
- 24. gps 사용/사용 중지 방법은 어떻게 받습니까?
- 25. Windows Vista 보안을 어떻게 지나치게 받습니까?
- 26. 날짜와 시간이 주어지면 Epoch 시간은 어떻게 받습니까?
- 27. VB.net : 시작 연도의 날짜는 어떻게 받습니까?
- 28. Redis에서는 키의 만료 날짜는 어떻게 받습니까?
- 29. SmtpClient : 배달 실패 알림은 어떻게 받습니까?
- 30. Facebook 검색어 언어 - 메모 태그는 어떻게 받습니까?
불행히도 Microsoft는 여기서 불쾌하고 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 –