2013-03-08 45 views
3

Im在NServiceBus中使用分發服務器,我打了一個關於DTC的忽略牆。 我在過程中只做了一次DTC,一次也許兩次,而不是很多,所以即時通訊的概念非常新鮮。NServiceBus和DTC的

Question: 
To ensure durable messaging with NSB, is it absolutely necessary to use DTC's? 

的原因,我問的是,我希望NSB能夠在檢測到任何異常,說的處理程序,並沒有從隊列中移除的消息到錯誤,因此反應。因此不需要DTC。這當然意味着處理程序中的任何數據庫或外部服務訪問都需要程序員執行她/他自己的回滾等。由於這個原因,DTC似乎是最好的方式。因此,我所有的DTC(如果我理解他們是正確的),因爲從我的角度來看,確保消息不會從隊列中丟失,並且只要處理程序正確實施並且其他外部服務參與DTC,消息處理永遠不會損壞。

但我不知道,特別是因爲服務器維護團隊中一位備受尊敬的人使用了句子「DTC會給你帶來痛苦的世界!當我運用DTC在數據庫服務器上激活DTC的想法時......但他還沒有提出爭論,爲什麼在DTC的這麼多痛苦中......:/。

能否很好地理解DTC和NSB的人請幫我明確一下,我是否完全瞭解了我對DTC的理解,以及我是否完全錯過了DTC的一些大陷阱?

親切的問候

回答

3

NServiceBus經銷商和NServiceBus使用DTC的沒有什麼關係彼此。 DTC將由NServiceBus使用,無論您是否使用分銷商。

NSB分銷商工作人員(甚至是NSB分銷商未使用時單個工作站上的單個工作人員線程)不會在分佈式事務中彼此爭奪。讓我重申,在單個DTC事務中永遠不會看到兩個NSB工作線程。每個工作線程對本地隊列啓動一個事務,然後添加一個(可能遠程)數據庫事務(它分佈使)

有概念的一個很好的例證here

我不認爲你我錯過了任何大的陷阱。我只是解耦兩個概念,NSB分銷商和NSB如何使用分佈式交易

+0

謝謝。但我現在好奇,爲什麼你可以選擇使用IsTransactional(false)禁用DTC。禁用它有什麼好處?性能? – 2013-03-09 07:37:06

+1

IsTransactional告訴nsb不要在tx中登記接收操作。這意味着如果消息處理程序中出現任何錯誤,則消息將丟失。 Nsb 3有一個SupressDtc配置選項,仍然使用tx但避免了dtc。這就是說跳過dtc的主要含義在於如何實現業務邏輯。你打電話之前可能應該研究一下嗎? – 2013-03-09 07:51:55

+0

因此,如果處理程序失敗,使用SupressDTC仍然可以確保沒有消息丟失,但代價是處理程序然後必須手動處理任何數據庫事務回滾等,例如? – 2013-03-09 10:31:37