我有一個簡單的過程,從一個隊列讀取,處理消息,並輸出到另一個。我正在嘗試在TransactionScope中封裝這種傳輸,這樣從輸入隊列中讀取和在輸出隊列中寫入都發生在同一個事務中。TransactionScope在隊列之間發送時升級到MSDTC?
然而,它會出現MSDTC被用來進行本次交易,並且作爲結果,它比使用標準MessageQueueTransaction顯著慢。這是否應該發生?我的印象是,如果涉及範圍(例如消息隊列讀取和數據庫寫入),而不是僅涉及多個消息隊列,則TransactionScope只會提升爲外部事務。
謝謝。
編輯:這是所有我的筆記本電腦的那一刻,讓我確信沒有其他的機器均有涉及。
我也想補充一點,我確認了升級交易是通過Windows的‘組件服務’管理單元檢查發生(即本地DTC /事務列表)。我可以看到交易進入和離開這個屏幕,我認爲這意味着交易已經升級。假設我錯了嗎?
編輯2:我發現了相同的行爲,當我剛寫單個隊列!即
using (var ts = new TransactionScope())
{
using (var q = new MessageQueue("..."))
{
/* write data */
}
ts.Complete();
}
儘管隊列在本地機器上,但我可以看到DTC與上面一起使用。
與應用有關的隊列在哪裏?同一臺機器?不同的機器? –
您使用的是羣集服務器嗎? –
不,這一切都在我的筆記本電腦上。我已經通過一些澄清更新了我的問題。 – Barguast