在.NET中是否存在MessageQueueWatcher这样的东西?

时间:2009-08-21 03:20:30

标签: .net msmq

我目前使用System.IO.FileSystemWatcher作为“自己动手”消息队列系统的一部分(使用SOAP Web服务在服务器之间传递XML“消息”,将“消息”写入磁盘上的特定文件夹,其中运行FileSystemWatcher的Windows服务会在新消息到达时突然显示新消息,并使用它们执行高效操作。我在.NET 1.0或1.1(我忘记了)的时代写了这篇文章,作为使用COM-interop替代MSMQ SDK的替代方案。以所有这些为背景,我正在考虑用“真正的”消息队列实现替换这个ad hoc消息队列方案。问题是,似乎没有与FileSystemWatcher等效的MSMQ在队列到达时自动从队列中选择新消息。它是否埋藏在.NET框架的某个地方,或者我将不得不使用轮询或者保留他们现在的方式?

2 个答案:

答案 0 :(得分:5)

通过在无休止的线程中调用.Receive,它将阻塞,直到消息到达,并在收到消息时返回。这是正确的方法。

还有MSMQ触发器,但您只需要简单的.Receive行为,AFAICT。

答案 1 :(得分:1)

MessageQueues也有一个异步接收器:

MessageQueue mq = new MessageQueue();
mq.ReceiveCompleted += new ReceiveCompletedEventHandler(mq_ReceiveCompleted);
mq.BeginReceive();

请确保在处理程序中再次调用BeginReceive(),如下所示:

void mq_ReceiveCompleted(object sender, ReceiveCompletedEventArgs e)
{
  mq.BeginReceive();
  //do work here
}