我是NServiceBus的新手,嘗試將消息傳遞引入WCF/RPC解決方案。如何配置nservicebus使用網關時MSDTC不可用結束
由於架構限制和開銷(內存和CPU使用率已經很高),IT操作將不允許MSDTC。 (我也熱衷於避免2PC fwiw)。我還需要通過http傳遞消息,因此NSB橋看起來像一個很好的解決方案。
基於這些帖子(how-i-avoid-two-phase-commit和extending-nservicebus-avoiding-two-phase-commits),它看起來好像在禁用DTC時可以使用NSB。 聽起來像確實設法避免2PC的方式,我想要安裝NSB,但現在我只想讓NSB工作,而不是添加事件採購混合。
問題:
- 是否有配置NSB這種方式工作的任何例子嗎?我很高興增加額外的複雜性(自定義消息處理程序與本地消息狀態存儲) - 沒有2PC沒有真正的另一種選擇。我已經知道這個例子(IdempotentConsumer),但是這個回購的測試項目不包含代碼。如果有一個使用nosql存儲的例子,它會更有幫助。
- 我需要改變NSB橋來處理沒有DTC嗎?我猜測沒有 - 網橋事務只針對本地隊列,但消耗本地隊列的進程顯然需要編碼以避免2PC。正確?
- 在沒有MSDTC的情況下使用NSB還有其他有用的資源/文章嗎?解決方案(how-i-avoid-two-phase-commit)似乎不是太複雜,但鑑於我剛剛開始與國家統計局,這將是很好找到這個快速啓動...
- 我會認爲這將是一個普遍的情況 - 但沒有'似乎在避免使用NSB的MSDTC方面寫得很多。當然還有其他人正在使用消息總線,但不允許使用MSDTC ......還有另一種我錯過的顯而易見的方式嗎?
感謝
Rant ahead:「內存和CPU使用率已經很高IT Operations不允許MSDTC」。它總是很有趣,IT運營商和DBA如何做出決定,對軟件的構建和最終成本產生根本影響。不是說ES和所有這些都不好,完全相反,但應該使用它,因爲業務需要它,而不是因爲IT運營商的某個人認爲內存昂貴。相信我的開發時間是比內存和CPU更昂貴的方式。 - 結束咆哮 –
是的,我很清楚,開發時間比硬件更昂貴。我不認爲離開MSDTC是不好的 - 對於我們可以使用哪些持久性存儲有點限制。這就是爲什麼我感到驚訝,似乎沒有更多的圍繞NSB(論壇等)討論去除MSDTC的硬性要求(我想只能通過在NSB中安裝像jonathan oliver描述)。無論如何,沒有MSDTC是我已經處理的約束 - 所以我真的很喜歡看到一個如何解決它的例子。 – Justin
我不會稱之爲nsb的「硬」要求。你可以通過調用configure.IsTransactional(false)來關閉它。我們無法做進一步的工作,因爲您基本上需要使用代碼。但ES當然會讓這很容易。 –