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

时间:2011-09-23 07:08:48

标签: nservicebus

我有一个使用NServiceBus处理传入消息的Windows服务。 在处理消息时,我想检查队列中是否还有其他要处理的消息。 解决这个问题的最佳方式是什么?

2 个答案:

答案 0 :(得分:4)

对于这个特定场景,我会说一个传奇可能适合于收到的第一条消息创建它,打开一个超时(比如让我们说一分钟),在那段时间内收集所有消息,然后收集总线。 SendLocal是一条包含所有行的消息,另一个处理程序创建电子表格并上传。

答案 1 :(得分:1)

由于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/