2013-08-16 77 views
2

使用消息隊列服務總線改編職系,我想聽聽困擾我在過去幾天受到你的意見..問題在.NET

在我們的項目中,我們使用的是MassTransit SERVIC總線。我們使用IoC容器創建了一個IServiceBus(MassTransit的接口)的單例實例,所有需要此IServiceBus的類都在構造函數中獲取它。 這導致我們項目中的很多類獲取IServiceBus作爲構造參數,這使得它們與MassTransit服務總線耦合,實際上使用消息隊列實現了通知的概念。

我認爲這是一個不好的耦合例子。

通過將IServiceBus傳遞給各個類,我們正在定義這個類應該向外部監聽器發送通知的方式,並強制這種方式成爲面向服務總線的方式。

我認爲.NET的經典方式更好 - 類應該在其與.NET事件處理程序的接口中定義事件,並且任何希望使用此事件處理程序的觀察者都應該訂閱它。

我們以這種方式獲得的收益是我們沒有致力於使用服務總線來實現一個班級。這樣,服務總線可以成爲該類事件處理程序的觀察者,並且當該事件發生時,它會引發將某些消息發送到服務總線隊列的邏輯。

這也提出了一個大問題..

當我們爲什麼要使用服務總線中的一個項目,因爲該項目中的一個進程中運行?

如果項目包含多個進程,我可以看到其優點,因爲使用消息隊列傳遞強類型消息更容易,但我無法理解它在一個進程範圍內的好處。 如果我想讓類向觀察者,消費者等通知通知,我會從類內部引發一個事件,並創建一個或一組關閉的調度程序類,這些類將訂閱我項目中的所有這些事件,這樣我就可以處理消息傳輸的邏輯。另外,以這種方式,添加觀察者的邏輯將集中在項目中的一個位置。

我會很高興聽到你關於這個問題的想法..

蓋伊

回答

0

這是不是一個真正的偉大的SO問題。它很可能會被關閉。不管你的問題,IServiceBus的表面積都很小。如果需要,您可以輕鬆更換。如果您實現Consumes.*接口,則消費者更加耦合。但是,您可以將消費者註冊爲代表,那麼這並不重要。最終的結果應該是你的系統的整體耦合更少。

最後,您使用服務總線,因此您不必擔心郵件傳輸或傳遞。雖然有時進行內部進程溝通並不是一個真正的問題 - 在未來很容易分解。