2009-08-21 39 views
1

我目前使用System.IO.FileSystemWatcher作爲「滾動您自己的」消息隊列系統的一部分(使用SOAP Web服務在服務器之間傳遞XML「消息」,將「消息」寫入磁盤上的特定文件夾,其中Windows運行FileSystemWatcher的服務在它們到達時觸發新的「消息」,並用它們做一些有效的事情)。在.NET 1.0或1.1的日子(我忘記了這一點),我把它寫回了當時使用COM-interop的任何MSMQ SDK。以所有這些爲背景,我正在考慮用一個「真正的」消息隊列實現來替換這個特別的消息隊列方案。問題是,似乎沒有與FileSystemWatcher相同的MSMQ,可以在隊列到達時自動從隊列中選擇新消息。它是埋在.NET框架的某個地方嗎?或者我將不得不使用輪詢還是按照他們現在的方式離開?.NET中有MessageQueueWatcher這樣的東西嗎?

+0

System.Messaging被列入.NET 1.0。你不需要COM互操作。 – Cheeso 2009-08-21 03:53:42

+1

另外,除了一些具體的重新設計原因外,我會小心地將現有的MSMQ實現換掉。如果有效,請不要修復它。 – Cheeso 2009-08-21 03:56:10

回答

5

通過在無盡的線程中調用.Receive,它將阻塞,直到消息到達,並在收到消息時返回。這是做到這一點的正確方法。

也有MSMQ觸發器,但您只需要簡單的.Receive行爲,AFAICT。

+1

是的,MessageQueue.Receive()一直等待,直到消息到達隊列中。 – Cheeso 2009-08-21 03:55:08

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 
} 
相關問題