0

[已編輯]應該NServiceBus處理程序總是快速完成?

我不確定我是否理解正確。

裏面的佐賀一切都應該是簡潔,快速,根據這些指導性的帖子:

  • 喬納森·奧利弗的總結:blog.jonathanoliver.com/...
  • 烏迪大漢的原始:skillsmatter.com/skillscasts/ ...
  • 和一些早期的帖子
  • lostechies.com/jimmybogard/2013/03/26/scaling-nservicebus-sagas
  • docs.particular.net/nservicebus/architecture/principles

這就是說你的傳奇應該沒有商業邏輯,並且裏面沒有if-else指令。它應該只是一個管絃樂器,並且應該將其稱爲「成功導向」 - 即:在儘可能多地調用佐賀之前完成儘可能多的驗證。

但是單獨的處理程序(你稱之爲「獨立處理程序」?),那些不在傳奇內的處理程序呢?以下哪項是正確的:

a。一個傳奇之外的NServiceBus消息處理程序是否應該總是快速完成,並且如果有一個耗時的操作將其傳遞給一個線程並完成?

b。或者是更好地「處理」處理程序,這樣NServiceBus就會「知道」這個消息正在被大量使用,並且可以採取相應的行動 - 即通過自動負載平衡,在處理過程中創建另一個處理實例一個不同的過程,甚至不同的機器?

什麼是正確的路要走?

您能否提供一些示例代碼以及您的答案,並調用Foo.DoTimeConsumingBar()方法。

謝謝。

+0

與此同時,對佐賀應快速回應並且沒有業務邏輯的原因有正式答案是很好的。或者只是一個指向最新的官方答案的指針。 – pashute

回答

1

@pashute,您關於Sagas的聲明是正確的,應該不做任何工作(I/O),並且應該充當長期運行業務流程的編排者。

處理程序應該遵循SRP Single Responsibility Principle,即使它們是I/O密集型應該仍然保持瘦。在I/O密集型操作的情況下,分銷商/負載均衡器將有助於擴展負載。

這有道理嗎?

1

佐賀內部的一切應該簡潔快速。

此聲明不代表任何內容。簡潔的意思是什麼?快點是什麼意思?這個傳奇將盡可能快地運行在它運行的容器的限制之內。

如若一個傳奇外NServiceBus消息處理程序總是完整 很快,如果有一個耗時的動作過關上的 線和完整的?

不除非你已經建立你的處理程序,沒有。如果您的消息處理過程非常耗時,除了將處理消息的處理程序實例之外,沒有任何其他進程。

或者是更好的「豬」的處理程序,這樣的NServiceBus 「知道」被用了沉重的代價使用此消息,並能 採取相應的行動 - 即具有自動負載均衡?

當運行多線程時,多個hander實例將可用於處理消息。每個處理程序實例仍然只處理一條消息,但這可能會同時發生。由於消息是單一來源,即輸入隊列,因此可提供所需的「負載平衡」行爲。

你都應該盡你所能,以便有佐賀內沒有業務 邏輯.....你應該是「成功爲導向」的傳奇之前做盡可能多的 驗證成爲可能,從而使一旦進入佐賀 你期望成功

是,傳奇只應了長時間運行的進程的編排,而不是它的細節有關。

在上面的光線,我將修改我的回答對你原來的一個問題:

如若一個傳奇外NServiceBus消息處理程序總是完整 很快,如果有一個耗時的動作過關那對 線程和完成?

我沒有看到任何處理程序快速完成的特殊需要。這個傳奇的關鍵在於,如果它沒有被使用,它就會脫水成磁盤,所以它不像是在等待外部信息處理程序完成他們的工作一樣。

關於您對負載平衡的其他問題,我相信我的回答仍然基於我對問題的理解。

+0

@pashute感謝您的評論。現在我知道你來自哪裏,你的問題確實更有意義。我已經更新了我的答案。 –

+0

我編輯的問題,而不是兩個評論。其實這是我的問題的主要部分,而且看起來我並沒有說清楚自己。這是一個單一的問題。我的帖子中沒有兩個問題,只有一個(有兩個選項)。我們被告知要讓Sagas'平均和精益',並且他們不應該花時間,因爲各種原因。但另一方面,在傳奇之外,我們什麼也沒有告訴。我期待NSB專家的回答。我在問Which.Net員工推薦哪種方式。爲什麼。 – pashute

+0

我希望下週能得到NSB傢伙的回答。 – pashute

相關問題