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