我有一个使用NServiceBus来处理传入消息的Windows服务。在处理消息时,我想检查队列中是否还有其他消息需要处理。解决这个问题的最佳方法是什么?
对于这个特定的场景,我想说一个传奇可以适合于这样的场景:它是由接收到的第一个消息创建的,打开一个超时(比方说一分钟),在这段时间内收集所有消息,然后总线。SendLocal是包含所有行的消息,另一个处理程序为此创建电子表格并上传。
由于NServiceBus
正在使用MSMQ
,因此可以使用System.Messaging
的方法。包括一个修改的方法,我目前正在研究,做一种批处理。
using System.Messaging;
public int PeekAtQueue()
{
const string QUEUE_NAME = "private$\you_precious_queuname";
if (!MessageQueue.Exists(".\" + QUEUE_NAME))
return 0;
var messageQueues = MessageQueue.GetPrivateQueuesByMachine(Environment.MachineName);
var queue = messageQueues.Single(x => x.QueueName == QUEUE_NAME);
return queue.GetAllMessages().Count();
}
在编辑器中修改了自己。希望它还能编译:)顺便说一下,在这里发现了一个类似的讨论:
http://jopinblog.wordpress.com/2008/03/12/counting-messages-in-an-msmq-messagequeue-from-c/