我目前使用System.IO.FileSystemWatcher作爲「滾動您自己的」消息隊列系統的一部分(使用SOAP Web服務在服務器之間傳遞XML「消息」,將「消息」寫入磁盤上的特定文件夾,其中Windows運行FileSystemWatcher的服務在它們到達時觸發新的「消息」,並用它們做一些有效的事情)。在.NET 1.0或1.1的日子(我忘記了這一點),我把它寫回了當時使用COM-interop的任何MSMQ SDK。以所有這些爲背景,我正在考慮用一個「真正的」消息隊列實現來替換這個特別的消息隊列方案。問題是,似乎沒有與FileSystemWatcher相同的MSMQ,可以在隊列到達時自動從隊列中選擇新消息。它是埋在.NET框架的某個地方嗎?或者我將不得不使用輪詢還是按照他們現在的方式離開?.NET中有MessageQueueWatcher這樣的東西嗎?
1
A
回答
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
}
相關問題
- 1. 東西像FindBugs這樣的.NET/C#
- 2. 可以寫這樣的東西嗎?
- 3. 有沒有Perabyte這樣的東西?
- 4. Zend在Smarty中有{strip}這樣的東西嗎?
- 5. Verilog沒有main()這樣的東西?
- 6. 管理者設計模式有這樣的東西嗎?
- 7. 還有像Unity Everyplay這樣的其他東西嗎?
- 8. Fortran編譯器沒有這樣的東西嗎?
- 9. Grails在Rails中有沒有像acts_as_tree這樣的東西?
- 10. 如何製作這樣的東西?
- 11. 如何創建這樣的東西
- 12. 我如何模擬這樣的東西?
- 13. stringstream可以解析這樣的東西嗎?
- 14. 是東西() - >東西總是有效的PHP?這很好用嗎?
- 15. Zsh中是否有像bash_profile這樣的東西?
- 16. 播客的IMAP有沒有這樣的東西?
- 17. 有沒有像ISerializable這樣的適用於XMLSerializer的東西?
- 18. 有沒有可寫的VirtualPathProvider這樣的東西?
- 19. .NET 3.5帶有Service Pack 1,.NET 3.5 SP1,.NET 3.5.1,.NET 3.51。他們都是一樣的東西嗎?
- 20. 有沒有像模仿這樣的東西?
- 21. 有沒有像緩存grep這樣的東西?
- 22. 有沒有像「Ruby on Rails寶石」這樣的東西?
- 23. 有沒有這樣的東西作爲JSON生成器?
- 24. 有沒有像CURLOPT_CONNECTIONTIMEOUT這樣的東西存在?
- 25. 有沒有像SMTP到FTP網關這樣的東西?
- 26. 有沒有RESTful網址這樣的東西
- 27. NEON有沒有像「emms」這樣的東西?
- 28. 有沒有C++解釋器這樣的東西?
- 29. D-Bus:有沒有「D-Bus嗅探器」這樣的東西?
- 30. 有沒有這樣的東西作爲一個HTTP shell?
System.Messaging被列入.NET 1.0。你不需要COM互操作。 – Cheeso 2009-08-21 03:53:42
另外,除了一些具體的重新設計原因外,我會小心地將現有的MSMQ實現換掉。如果有效,請不要修復它。 – Cheeso 2009-08-21 03:56:10