2011-04-23 72 views
0

我正在使用一個系統,現在只有一個進程空間;我們將其分解爲幾個流程,最初是在同一個盒子上運行,但最終要分佈在幾臺獨立的機器上。我傾向於使用ESB(NServiceBus,Rhino ESB)或可能使用WCF +隊列來處理我們的應用程序所具有的發佈/訂閱和請求/響應場景。然而,我正在爲抽象而苦惱:我不想讓各個組件知道他們正在通過總線進行通話。目前連接各種服務的API可以很好地轉換爲這種模式,但是我想從客戶端和服務器端隱藏它。爲客戶端和服務器編寫大量自定義代理代碼,有沒有更好的方法來處理這個問題?我意識到WCF可以根據服務定義自動生成代理,但我真的很喜歡其他一些我用(比如說)犀牛服務總線獲得的東西。抽象出服務總線/分佈式消息的存在?

理想情況下,我希望能夠使用IoC替換不同的實現(帶和不帶ESB /消息傳遞層)(知道必須通過約定強制實施通過接口傳遞的內容的限制),但我不確定該去哪裏。我真的不希望將當前接口上的每個方法調用都更改爲它自己的離散消息類。

任何資源/模式/工具來幫助我做到這一點?如果我不清楚,請提問。謝謝。

回答

1

可能沒有一個解決方案/現成的組件可能對您有所幫助。

問題1:
基本問題可以通過ESB來解決,因爲它提供了位置透明服務聚合。服務使用者與服務提供者之間的中介/經紀人的常規ESB
舉一個簡單的例子:

Service_A  depends on  Service_B 
Service_C  depends on  Service_B 
Service_B  depends on  Service_D

在這種情況下,進步的最好方式是這樣的:

  1. 定義由Service_BService_D暴露外部依賴合同(可能爲web服務,儘管ESB支持多種協議)在服務Service_A,Service_CService_B中,並通過ESB消耗。
  2. 在ESB中,首先在同一個實例上路由服務Service_BService_D
  3. 如果在不同位置遷移Service_DService_B作爲Service_DxService_Bx,則可以重新配置ESB以路由到新位置。
    IOC的問題:另外,一個ESB可以基於某些參數集(例如,測試數據到Service_B和生產數據到Service_Bx

問題2被配置爲路由到Service_BService_Bx可能很難實現;可能沒有必要。
我假設客戶,而不是從一個已知的位置消費,注入服務位置的下落。這實際上將配置傳輸到客戶端。因此,對於添加到系統中的每個新客戶端,都需要有一個單獨的配置控制。這可能會導致後勤問題。

請張貼您的最終解決方案,非常有興趣瞭解您的方法。

+0

正如後續 - 我的項目的這一部分已被提出並仍然如此。如果/當我們選取它時,我會跟進。 – Joe 2011-07-29 18:26:30

+0

@Joe,不幸的是,每天都有越來越多的基於SOA-tools/ESB的大型企業項目被提交。不好的跡象:表明IT部門缺乏資金...... – CMR 2011-07-29 19:33:39