1.3.2 Sagaトランザクション・プロトコル
次の図は、Eclipse MicroProfile Long Running Actions (LRA)に基づくSagaトランザクション・プロトコルを使用するときに、マイクロサービスが相互に通信したり、MicroTxと通信したりする方法を示しています。

マイクロサービスが相互に通信してサンプル・トランザクションを処理する方法を説明します。
- トランザクション・イニシエータ・サービスは、MicroTx Sagaコーディネータをコールし、Sagaトランザクションを開始してそれに登録するためのコールバックURIを渡します。
- トランザクション・イニシエータ・サービスは、ヘッダーでSagaのIDを渡して、1つ以上の参加側サービスを呼び出します。
- 他の参加側サービスはMicroTxをコールし、Sagaトランザクションに登録または参加します。参加側がSagaに参加するとき、コールバックURIを提供しますが、これにはSaga内の担当部分を完了したり補正したりするものが含まれます。
- トランザクション・イニシエータ・サービスは、MicroTxをコールして、トランザクションを完了または補正します。
- MicroTxは、トランザクション・イニシエータ・サービスがトランザクションの完了と補正のどちらを要求するかに応じて、各参加側サービスの完了コールバックURIまたは補正コールバックURIをコールします。
各参加側は、相互に独立したローカル・トランザクションを使用します。Sagaトランザクション・プロトコルはローカル・トランザクションを使用するため、システム全体では状態が矛盾する期間がありますが、トランザクションの目的はトランザクションの最後に一貫性を実現することです。これは、ローカル・トランザクションが個別に完了または補正されるためです。つまり、1つ以上のローカル・トランザクションが完了または補正されても、他のトランザクションが完了していない時期があります。ロックや分離が行われないため、他のシステムまたはユーザーがこのように一貫性のない状態を認識する場合があり、一貫性のない状態に基づいて誤った決定を行う可能性があります。
親トピック: 分散トランザクション・プロトコルについて