2013-03-06 27 views
3

我們有1個服務從數據庫中選擇som id's,然後用一些buisness邏輯按順序處理它們。我們想要擴展並且並行執行的處理,而不會創建大量內部線程。NServiceBus經銷商 - 如何拆分應用程序

我的問題是:

如果我想使用經銷商向外擴展,應該如何以及我該怎麼辦呢?

解決方案1: 服務被分成2:

  1. 原來的服務被修改爲只從數據庫中選擇的ID,然後將它們發送給工人。這將是分銷商(RunDistributorWithNoWorkerOnItsEndpoint)。
  2. 一種新的服務,將作爲一名工人來處理商業邏輯和功能,處理每一個無聊的身份證件。如果我想要更多的工人,我簡單地多次啓動相同的過程。

解決方案2: 該服務被分成3:

  1. 原始服務被修改,以只從數據庫中選擇的ID,然後將它們發送到所述分配器。
  2. 一種新服務,分發者(RunDistributorWithNoWorkerOnItsEndpoint),它只處理負載均衡給worker。
  3. 一個新的服務,工人,將持有buisness邏輯和處理每一個編號。

解決方案3: 該服務被分成2:

  1. 原始服務被修改,以只從數據庫中選擇的ID,然後將其發送。作爲發件人運行。
  2. 一種新的服務,將作爲工作人員和分銷商持有商業邏輯和功能,處理每個編號或分發它們。

解決方案1使得很多的意義,我,但使用那豈不是莫名其妙的經銷商將有2個responsabilities:

  1. 選擇IDS。
  2. 將ID分配給工作人員。

但我不知道這是可能的,甚至可能是反模式,當我從NSB文檔查看ScaleOut示例。

解決方案3是我相信我應該去閱讀文檔和ScaleOut示例againg但我還不太確定。

我試圖通過擴大與NSB分銷商解決管道問題,我寧願做我自己的託管,不使用NServiceBus.Host。exe,但這不是一個嚴格的要求。

編輯: 我結束了使用的解決方案3中它的優點(在我看來),在配置隊列的任務比在溶液中2小,如果你是使用默認隊列命名。

親切的問候

回答

1

我們使用的解決方案2.做到了這一點,在過去版本的原因是在於我們做分銷商一起和高度可用的立場。在未來,我們很可能會讓分銷商做一些工作,否則就會坐得相對閒置。這個解決方案對我們很有幫助。

+0

我實際上剛剛實施瞭解決方案3今天。它有一個優點(在我看來),如果使用默認隊列命名,配置隊列的任務比解決方案2中的要小。 – 2013-03-08 21:17:08