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