2010-11-21 50 views
0

我正在研究一個由數據轉換組件組成的系統。這些組件中的每一個都在對象上執行一項非常簡單的任務,然後將其傳遞給鏈中的下一個組件。每個組件都作爲Windows服務運行。我以這種方式設計了這個系統,以提高維護和輔助未來的可擴展性。快速,高效的處理間消息傳遞

目前,我使用消息隊列將這些對象在組件之間傳遞,但這很快成爲一個問題。可能有數十種服務都在不斷地從消息隊列中讀取和寫入消息隊列。據我所知,所有的消息都被序列化並寫入磁盤,在我的系統中吞吐量非常快,看起來非常浪費。

是否還有其他已建立的系統可用於進程間通信,避免了連續磁盤讀取和寫入的開銷?

謝謝。

回答

1

如果您不需要有保證的可靠或事務性消息,您應該可以通過將Message.Recoverable屬性設置爲false來顯着提高System.Messaging中的性能。順便提一句,這是已經錯誤,所以假設原始解決方案使用MSMQ,你對磁盤使用的假設可能不正確。

類型:System.Boolean

真如果消息的遞送保證(通過保存該消息到磁盤而EN 路線);如果交付不確定,則爲false。默認值是false。

最好解決方案取決於您的服務的要求。你可以使用它,或者你可能需要一些極低延遲的服務總線(通常是商業產品),或者你自己構建的東西。

+0

我使用的是默認值,所以在我當前的系統中這將是False。 – Barg 2010-11-21 23:45:46

+0

那麼是什麼讓你認爲一切都寫入磁盤? – 2010-11-21 23:47:44

+0

一個假設。實際上,我開始開發一個消息隊列實現,在決定將它們寫入磁盤之前(例如,如果「目標」服務脫機),將實數對象存儲在內存中。對象通過來源的命名管道發送到「服務器」,並通過另一個命名管道由目標讀取。平均而言,這比MSMQ快3倍。但是,除非必須,否則我不喜歡重新發明輪子,所以我希望現有解決方案(如果有的話)。 – Barg 2010-11-21 23:54:33

1

ZeroMQ是一個內存唯一的消息隊列實現。