RabbitMQのメッセージキューベースの分散トランザクション・ソリューション - MQは、ミドルウェアの戦闘を分散型メッセージング

1速度は、MQを理解します

はじめにRabbitmgは、分散トランザクションを解決するための5つの中核概念を習得しなければなりません

言語レベルの分散メッセージング・ミドルウェア、アーラン言語発達に基づく高同時実行処理能力、。そして、春のフレームワークは、同じ会社です。
サポートの永続性、高可用性

5つのコアコンセプト:

  1. キュー:ローカル実店舗データ
  2. 取引所:要求を受信し、データ・ダンプ
  3. バインド:どこ要求を受信した後保存します
  4. アプリケーションデータが送信される:メッセージプロデューサ
  5. メッセージコンシューマ:アプリケーションデータ処理を削除します

2、分散トランザクションの問題

分散トランザクションは、ビジネスの問題であり、特定のシーンから離婚することはありません。

いくつかの解決策2.1分散トランザクション

契約の●基づいて、データベースのXA / JTAの方法は、
データベース・ベンダーのサポートを必要とするJavaコンポーネントがatomikosなどがある
●非同期校正方法データ
アリペイ法案の形で、支払い状況を確認するには、マイクロチャネルの有料イニシアチブ;
●ソリューションは、信頼できる情報源(MQ)に基づいており
、非同期シーン;ユニバーサル強い;高の拡大
●TCCプログラミングソリューション
を厳選し、アリ、アリの金のドレス独自のパッケージDTX

この記事の目標:すべての人々のために、信頼できる情報源に基づいた分散トランザクションの問題を解決することを学びます。
分散トランザクション、ターゲットを絞ったビジネスのためのソリューション、それが重要なアイデアの代わりに、コピーであります

  • 米国ミッションコメントシステムアーキテクチャ

複数のシステム間で2.2分散トランザクションの問題

  • シングルユーザー生成された注文
  • ご注文は、それによって2つのトランザクションの一貫性の問題が発生、データを渡す必要があります

間違ったケース

インタフェースの呼び出しが失敗した場合、トランザクションがオーダーシステムをロールバックされ、ユーザーは操作が失敗した要求されます

误以为这样的接口调用写法,就不会有分布式事务问题

コールの成功または失敗インタフェース、分散トランザクションの問題を持っています。

  1. インターフェイスの呼び出しが成功すると、注文システムのデータベーストランザクションが失敗したコミット、システムは、運送状をロールバックしない、データを生成します
  2. インタフェースはタイムアウトを呼び出し、注文システムのデータベーストランザクションのロールバック、運送状システムインタフェースは、データを生成し続けます

いずれの場合も、データの不整合につながることができます

5つのステップ - 分散トランザクションを実現する3、

MQを経由してノートに5つのステップだけでなく、ローカルの分散トランザクション処理を分散トランザクションを解決します

  • すべてのHTTP要求インターフェースウェイビルシステム、問題を送信するためにシステムを注文する前に!
  • したがって、我々はMQ、非同期スクラッチにメッセージを考えます!

3.1全体的なデザインコンセプト


ゆっくりと貨物運送状の作成データセンターを待って、ケータリング受注後、必須同時ではありません

  1. 信頼性の高い生産:メッセージがサービスRabitmqに送らなければならないことを確実にします
  2. 信頼性の高い消費:メッセージが適切に消費取る必要があることを確実にします

そして最後に、マルチパーティデータへの合意に到達します。

3.2ステップ1 - 信頼性の高い情報記録されたメッセージを生成します

  • 可能なメッセージは、それを送信するために失敗しました - 隠された危険性があります!

特定のデータの成功を確保するために、MQに送信されます。
同じトランザクションでは、オペレーティングテーブルのレコードの増加は、レコードは每一条发往MQ的数据以及它的发送状态
私たちは、注文システム内のローカル情報テーブルを追加しますので、

実際のコードではなく、HTTPインタフェースコール課金システムインタフェースによって、しかしMQを使用するので、

注文を生成するとき、だけでなく、地元の情報テーブルの保存


3.3ステップ2 - 生産信頼性のあるメッセージング(変更メッセージ送信状態)

  • 使用RabbitMQのトランザクションパブリケーションの承認メカニズム(確認)
    開封後、MQ正確受付メッセージ戻り領収書

  • そして、ローカル情報テーブルを更新する方法を知ることができます

- SBにオープン確保するための確認メカニズム


  • 肯定応答が受信されない場合は、メッセージの変更は状態を失敗とその他の特別な事情
    兜底方案:定时检查消息表,超时没发送成功,再次重发

3.4ステップ3 - 信頼性の高いメッセージング処理(通常処理)

  • 貨物運送状システムが突然メッセージデータを受信ダウン、またはDB、DBが突然ダウンしたときに運送状を訪問した後、メッセージデータはあなたに失われることはありません!

だから我々は、次の特性が必要です。

冪等は
データのみに対応する処理時間を、メッセージデータの複製処理、ユーザの操作を妨げる

開く手动ACK模式
消費者制御メッセージの再送/削除/廃棄することによって

3.5ステップ4 - 信頼性の高いメッセージング(メッセージ再送信)


処理が失敗した消費者は、我々は消費者に再び再MQする必要があります。
異常が通常消費者が自身のレコードの再試行回数、およびコントロールの数を何回かリトライ(再試行常にではありません!)

ステップ5 3.6 - 信頼性の高いメッセージング(メッセージの廃棄)

失敗を扱う消費者、または直接不能キュー(DLQ)に転送し、廃棄
重试次数过多、消息内容格式错误等情况,通过线上预警机制通知运维人员

4まとめと拡張

4.1 MQプログラムの長所と短所

オープニング利点

  1. 融通
  2. 開発と強いです
  3. 成熟したプログラム

口の欠点

  1. 唯一の非同期シナリオのメッセージベースのミドルウェア、
  2. メッセージの処理には、ビジネス上許容することができるようにする必要性を遅延されます

分散トランザクションを避けるようにしてください。
非同期の非中核取引をしよう。

4.2拡張

分散トランザクション・ソリューションのための理論的根拠

CAP理論
BASE理論
2PCプロトコル
3PCプロトコル
Paxosアルゴリズム。
筏・コヒーレンス・プロトコル

リリース5元の記事 ウォンの賞賛0 ビュー245

おすすめ

転載: blog.csdn.net/weixin_32822759/article/details/105365940