2009-12-09 51 views
7

我目前正在開發一個應用程序,其中應用程序的一個組件需要根據某些事件與多個其他系統組件進行交互。這些事件基於許多不同的觸發器發生......某些事件是由用戶的行爲引起的,其中需要通知其他用戶,某些事件是基於時間的,而其他事件則基於對象狀態的變化。使用.NET的發佈/訂閱模型有哪些技術可用?

根據我到目前爲止所看到的,聽起來像解耦應用程序組件的最簡單方法是設置發佈/訂閱模型,其中組件中的對象發佈其他感興趣的應用程序組件可以訂閱的事件至。

我見過nServiceBus,並且出於「供應商鎖定」的原因,我無法在Azure中使用.NET服務。還有其他技術可用嗎?我應該考慮一種不同的方法嗎?

編輯 - 很明顯,這是一個基於網絡的高容量應用程序。應用程序是ASP.NET MVC,MVC應用程序正在與多個WCF服務進行數據通信。

+0

我不是.Net專家。但是,我認爲.Net消息隊列(System.Messaging)是針對這個特定的問題。 – 2009-12-09 20:26:55

+0

大部分服務總線都建立在windows消息隊列之上。 – 2009-12-09 20:29:10

回答

6

WCF肯定能夠處理髮布/訂閱方案 - 並且一旦.NET 4與新的WCF Azure中繼綁定一起發佈,它將會更多。

現在,檢查出的話題這些文章:

對於未來基於Azure的發佈/訂閱使用的消息。NET服務總線,在這裏看到這些文章:

+0

這似乎是具有最完整文檔的選項,並且看起來它將更容易移動到.NET Service Bus中,這就是爲什麼我接受此答案。 – mkedobbs 2009-12-10 16:30:33

0

Prism附帶提供鬆散耦合事件的EventAggregator。

3

還有MassTransit。從未使用過它,但它通常在與nServiceBus相同的對話中提及。

具體取決於你想要做什麼,還有Managed Extensibility Framework。不是一個真正的發佈/訂閱框架,但是如果你還沒有這個框架,就應該注意。

+0

我不認爲MEF對於我正在嘗試做的事情是完全正確的。 +1爲MassTransit rec ... – mkedobbs 2009-12-09 20:35:00

2

烏迪(nServiceBus的創建者)有他的域事件中的概念的一個精簡版在他的blog

我們使用這個作爲基礎來開發一個更簡單的實現,如nServiceBus,我們可以使用我們的方案。

0

假設您有多進程或SOA架構,到目前爲止的答案都是好的。

如果它是一個簡單的獨立應用程序,也許內置的C#事件模型適用於您的情況。或者,也可以使用委託或接口傳遞給服務器/發佈者。

This observer pattern link may be helpful。

1

要使用.net實現經典的發佈/訂閱模型,我將使用ActiveMQ。這很容易理解,如果您已經知道JMS,則學習曲線非常平坦。