分散トランザクション・ベースのメッセージキューを実装

分散トランザクション・ベースのメッセージキューを実装

シーン:

農産物の注文、ショッピングカートシステムマイナスカートのビジネスのためのシステム。

アイデアの実現:

  1. 注文システムは、(順序を作成しない)メッセージ・キューにトランザクションを開きます。
  2. メッセージサーバへの注文システムは、「メッセージと半分」を送信し、このメッセージは半分メッセージの内容が完全でないことを言っているわけではない、どのようなことが含まれていることは、完全なメッセージの内容で、半分と共通メッセージの唯一の違いは、消費者のために、トランザクションのコミット前に、メッセージであります、このニュースは表示されません。
  3. セミメッセージは、注文システムがライブラリに提出ライブラリとデータベーストランザクションの注文を作成するためにローカル・トランザクション、および順序の記録を行うことができ、正常に送信しました。
  4. その後、地元の事務の結果に応じて取引メッセージをコミットまたはロールバックすることを決定しました。注文が正常に作成されている場合は、フォローアップ・プロセスを続行するには、このメッセージを過ごすために準備ができてカートシステムショッピング、トランザクションのニュースをコミットします。オーダー作成に失敗した場合は、カートシステムショッピングすると、このメッセージを受信しません、トランザクションのニュースをロールバックします。

オレンジとグリーンは2回の取引です。

問題:

ステップ4トランザクションが失敗したことをコミットし、注文がローカルトランザクションシステムソウルカートシステムに提出されました。この時間は、一貫性のないデータが得られ、メッセージは表示されません。

メッセージキューのトランザクションを解決するためにどのようにプロセスが異常表示されますコミットします。

カフカは、直接ユーザーの裁量を投げ。

増加し、トランザクションの実装RocketMQで取引逆引き、RocketMQはBrokerが提出する要求またはロールバックを受信していないトランザクションメッセージを送信するために、障害の問題を解決するためのメカニズムを、抗Brokerは、定期的に現地生産にこのトランザクションの対応をチェックするために行くだろう事務の状態、その後、抗チェックの結果に応じてトランザクションをコミットまたはロールバックすることを決定しました。

メカニズムをペッグトランザクションをサポートするために、私たちのビジネスのコードは、事務のローカル状態の逆引きインタフェースを実装する必要がありRocketMQローカルトランザクションの成功または失敗を通知します。

本実施形態の逆引き論理順序が順序でライブラリーに存在することができるかどうか、メッセージIDに応じてのみためにクエリ簡単です。

あなたは前に完全に作成するために、メッセージキューに注文を送ることができますか?だから、メッセージを作成するために送信するために失敗した場合を考慮していません

ノードが突然電源が切れ、オーダー作成の成功ではなく、十分な時間メッセージ:ケースを考えてみましょう。

別のケースでは順序が正常に作成され、マイナスカート(フォローアップ動作が)一種の補償オーダー作成、削除、書き込みに失敗しています。

このことができます。

現地情勢の電源を入れ、メッセージが正常にローカル・トランザクションをコミットまたはロールバックするかどうかを決定するかどうかに応じて受注、2.メッセージ、3を作成します。この排除の必要性トランザクションメッセージも、このシナリオの問題を解決することができますか?

ローカルトランザクションは失敗メッセージの送信済みコミットした場合、一貫性のないデータへのリードを撤回することはできません。

概要

原子性、一貫性、分離性、耐久性:メッセージキューのトランザクションまたは非同期トランザクションは、4つのプロパティの業務を次のかどうか。

分散トランザクションを実装するためのより多くの方法:blog.csdn.net/ityqing/art ...


****コードワードは****あなたが私に懸念を与えるのを助けるために持っていることは容易ではない場合

****愛の生活愛の技術QQグループ:894 109 590 ****

おすすめ

転載: juejin.im/post/5dcbd8fa6fb9a060150afe07