2013-02-27 37 views
2

所以我正在研究在我們當前的設置中實現NServiceBus,並試圖更好地瞭解應該如何設置。NServiceBus,WCF架構

我們當前的設置由多個客戶端(網站,計劃任務等)組成,這些客戶端調用了我們爲處理髮送電子郵件而設置的WCF服務。當然,如果服務出現故障,我們的客戶開始出現錯誤,所有這些信息都會丟失(我們希望有一個ESB的原因之一)。

我見過如何配置WCF服務來處理pub/sub設置中的nservicebus消息。我不確定的是建立它的最佳方式是什麼。

設置1:

客戶端(出版商) - > NServiceBus處理程序(用戶) - > WCF服務

在這種情況下,再創你會增加處理器的數量(託管nservicebus服務?) ,只保留一個WCF服務。

設置2:

客戶端(出版商) - > WCF服務(用戶)

這一個你剛剛增加的WCF服務的數量規模(更新將是一場噩夢)。

我剛開始研究ESB體系結構,所以如果我完全關閉,請告訴我。我基本上只是想知道什麼對你有用,什麼是「最佳實踐」往往是。

謝謝!

回答

1

如果你通過NServiceBus實現這個功能,我不完全清楚你需要什麼WCF。除了從多個客戶端接收消息(發送電子郵件)之外,WCF組件是否需要?如果沒有,你可以從等式中移除WCF。

從它的聲音中,您還希望服務充當處理髮送電子郵件請求的單個邏輯端點。如果是這樣的話,你會想用Send(一個命令)而不是Publish(一個事件)。發佈用於廣播一個事件,這意味着已經發生了;發送用於指示另一個組件做些什麼。這聽起來像你想要後者。

可通過Distributor完成端點的縮放。這可能會或可能不會有用,具體取決於您期望的瓶頸位置。

編輯:根據您的評論,我會簡單地去第二個設置,只需將處理程序添加到WCF服務。如果您在IIS中託管WCF,請確保在應用程序池回收(即將傳入的消息不會以與傳入的WCF請求相同的方式將其喚醒時)喚醒該進程。

+0

所有現有的邏輯都在WCF服務中。計劃是分階段完成這項工作,將WCF服務作爲最終端點,以便我們尚未轉換的應用程序仍然可以使用它,如果需要更新,我們只需要在一個代碼庫中進行更新。將邏輯移至NServiceBus流程確實有意義,並且是一種選擇。 – 2013-02-27 18:09:42

+0

更新了我的答案。 – 2013-02-27 18:50:44

+1

@RussellDurham我建議只從你的NServiceBus處理程序調用進程中的WCF代碼。 – 2013-03-01 14:44:07

0

我們在內部做類似的事情,一個NSB端點處理所有的電子郵件發送。客戶端可以直接使用NSB到Bus.Send()命令向電子郵件端點發送消息,或者也可以通過WCF公開該端點(僅將命令傳遞給端點)。一旦端點擁有這些命令,他們就會調用您的現有服務來維護與現有客戶端的兼容性。