2011-06-21 34 views
3

我想創建一個由消息「Event1」啓動的傳奇,但它會忽略具有相同應用ID的「重複」啓動消息的接收(這可能是由於兩個或更多用戶在短時間內擊中UI按鈕時間)。該文件似乎表明,這種方法是有效的:如何防止多次啓動NServiceBus傳奇?

  • 佐賀聲明IAmStartedByMessages<Event1>
  • 佐賀本身配置爲使用ConfigureMapping<Event1>(s => s.SomeID, m => m.SomeID);
  • 句柄(事件1 EVT)設置當它處理的第一條消息一個布爾標誌,並掉出來如果標誌已經設置,則處理程序的名稱。

這項工作?如果訂閱者是多線程的,我會遇到競爭狀況嗎?如果是這樣,我如何才能達到預期的行爲?

謝謝!

回答

4

當兩個Event1消息同時處理時,競態條件發生。防止創建兩個saga實例的方法是通過在SomeID列上設置唯一約束。

+0

好的,謝謝。我是否正確地認爲由獨特的約束導致的失敗會導致它重試,然後以預期的結果打我的守衛邏輯? – jlew

+0

這是絕對正確的。 –