在处理NServiceBus消息时,是否可以查看输入队列?



我有一个使用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/

最新更新