2012-03-19 68 views
1

我目前正在做一個遺留應用程序,它在機器之間進行大量的同步通信。通信主要通過Http帖子完成,我想知道如果使用NServiceBus使通信異步,我們是否會受益。NServiceBus會是我們的應用程序的正確選擇嗎?

通過CQRS,我已經意識到NServiceBus,但沒有詳細看過它。

與編寫應用程序的同事交談時,他們看到它就好像無法進行調用那麼整個事務就會失敗,我們應該堅持這種模式。大多數通信涉及多個用戶在服務器上配置硬件,在這種情況下,我們不需要某種排隊/異步框架。

那麼,我會從異步和NServiceBus是正確的框架有什麼好處?我如何說服他們,如果是我們的情況,一個asnyc消息傳遞架構是否應該走?或者我介紹一個沒有必要的框架?

+1

POST失敗時會發生什麼?你如何解決它? – 2012-03-19 23:35:23

+0

在這個階段它全部或全部沒有,所以整個事務得到回滾。 – 2012-03-20 10:02:37

+0

所以我會假設重試是手動的。如果在重試之前需要手動干預和研究,那麼我不知道添加消息是否有幫助。 – 2012-03-20 13:16:29

回答

3

那麼,「如果它沒有壞」的老格言在這裏發揮了作用。儘管如此,如果沒有理由「修復」某些東西(例如可用性/數據丟失問題),那麼建立一個用於改變它的參數是非常困難的。

爲了解決你的問題,根據我的經驗,NServiceBus的一個主要優點是擁有成本低。很容易拿起,學習,部署,而且一旦在生產中有很少的管理開銷。

UPDATE

RE:

這取決於你想怎麼玩的話:關於顯示通話的結果給用戶評論。

在這種情況下,在CQRS模式中向用戶顯示成功消息是很常見的,因爲當用戶檢查調用結果時,結果將不是他們期望的結果。但是,如果通話執行了一些可能導致延遲的嚴重處理,或者如果通話具有「自然」很高的失敗機率,那麼您可以選擇向用戶顯示「謝謝您的請求」消息然後通過一些離線方式(例如帶有鏈接到響應的電子郵件)向他們提醒通話結果。

當你走異步時,你必須以不同的方式開始考慮服務水平協議 - 例如指定99%的請求將在1秒內處理,然後你可以圍繞該要求規劃你的設計和基礎設施。

+0

謝謝,它更試圖查看NServiceBus是否在我們的應用程序中是必要的,並試圖獲得一些反饋,看看是否有任何好處。 – 2012-03-20 10:04:09

+0

NServiceBus幾乎肯定會滿足您的所有要求,並免費爲您提供很多好處。其中一個主要優點是您的代碼變得簡單很多,因爲您可以刪除所有失敗處理/補償代碼,因爲這是爲您處理的。 – 2012-03-20 10:40:27

+0

謝謝。如果我確實使用了NServiceBus(忽略了一個mo的格言),並且失敗了,那麼即使我的活動存儲庫(我正在使用J Oliver的事件採購庫)已經更新,但用戶仍然感覺所有工作都已更新,但我的調用其他機器失敗了? – 2012-03-21 10:10:59

相關問題