3

NServiceBusでディストリビューターを使用していますが、DTCに関して無視の壁にぶつかりました。私は、プロセス間で何かを行うときにDTCを1回、おそらく2回しか使用していませんでした。そのため、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とNSBをよく理解している人が、DTCの理解が完全にずれているかどうか、およびDTCで完全に見逃している大きな落とし穴があるかどうかを明確にするのを手伝ってもらえますか?

敬具

4

1 に答える 1

3

NServiceBus ディストリビュータと NServiceBus での DTC の使用は互いに何の関係もありません。DTC は、ディストリビュータを使用しているかどうかにかかわらず、NServiceBus によって使用されます。

NSB ディストリビューター ワーカー (および、NSB ディストリビューターが使用されていない場合は、単一のボックス上の個々のワーカー スレッドでさえも) は、分散トランザクションに互いに参加しません。繰り返しますが、1 つの DTC トランザクションで 2 つの NSB ワーカー スレッドが表示されることはありません。各ワーカー スレッドは、ローカル キューに対してトランザクションを開始し、(リモートの可能性が高い) データベースをトランザクションに追加します (これにより、分散されます)。

ここにコンセプトの素敵なイラストがあります

大きな落とし穴を見落としているとは思いません。NSB ディストリビューターと、NSB による分散トランザクションの使用方法という 2 つの概念を切り離すだけです。

于 2013-03-09T03:29:03.713 に答える