A.1.2 トラブルシューティングのステップ
-
Javaコードは
TravelAgencyControllerクラスの@LRA注釈付きメソッドbooking()に入ります。TravelAgencyのPDB (Travel PDB)のDBA_SAGASに対する問合せは、次の状態を示します:Travel PDB:
SELECT id, initiator, coordinator, status FROM dba_sagas;ID イニシエータ コーディネータ ステータス abc123
TravelAgency
TACoordinator
Initiated
この時点で、参加者は登録されていません。新しく作成されたSagaには、Saga識別子'abc123'が割り当てられています。
-
このステップは、参加者
AirlineがSagaコーディネータにACKを送信することによって、Sagaに正式に参加することに対応しています。これはSagaフレームワークによって処理され、Sagaイニシエータからの結合メッセージによって開始されます。Sagaイニシエータは、次のコード・セグメントに示すようにsendRequest()コールを呼び出します:saga.sendRequest ("Airline", bookingPayload);ACKはコーディネータPDBと参加者PDBの両方に記録されます。次のステップ3と4は、各PDBのSagaディクショナリ・ビューに示されているように、操作の時系列を表しています。
Airline PDB (ACK開始)
SELECT id, participant, initiator, status FROM dba_sagas WHERE id='abc123';ID 参加者 イニシエータ ステータス abc123
Airline
TravelAgency
Joining
-
トラベル・コーディネータ(
TACoordinator)は非同期ACKメッセージを受信し、指定されたSagaの参加者セットに参加者(Airline)を追加して、応答メッセージを送信することで応答します。Travel Coordinator PDB (ACK受信):
SELECT id, participant, status FROM dba_saga_participant_set WHERE id='abc123';ID 参加者 ステータス abc123TravelAgencyJoined -
AirlineはSagaコーディネータからACKメッセージを受信し、@Request注釈付きメソッド:handleTravelAgencyRequest()を使用して、Sagaペイロードの処理を開始します。Airline PDB (ACK完了):
SELECT id, participant, initiator, status FROM dba_sagas WHERE id='abc123';ID 参加者 イニシエータ ステータス abc123AirlineTravelAgencyJoined参加確認のプロセスは、AQメッセージング、伝播および通知を使用して実行されます。参加メッセージはソースOUTキュー(この例では
SAGA$_AIRLINE_OUT_Q1)でエンキューされ、メッセージ・ブローカを経由して、SagaコーディネータのINキュー(SAGA$_TACOORDINATOR_IN_Q1)に伝播されます。 -
Airlineから応答を受信すると、イニシエータ(TravelAgency)はSagaをファイナライズ(コミット)します。ファイナライズ・プロセスには、次の状態遷移が含まれます。Travel PDB:
SELECT id, initiator, coordinator, status FROM dba_sagas WHERE id='abc123';ID イニシエータ コーディネータ ステータス abc123TravelAgencyTACoordinatorCommitted -
Airlineはコミット・メッセージを受信して、独自のコミット・アクションを開始します。これにより、参加者のPDBでSagaがJoinedからCommittedに遷移します。Airlineはコミットのステータスを示すメッセージを、コーディネータに送信します。Airline PDB:
SELECT id, participant, initiator, status FROM dba_sagas WHERE id='abc123';ID 参加者 イニシエータ ステータス abc123AirlineTravelAgencyCommitted -
最後のステップは、
TACoordinatorがAirlineの最終ステータスを登録することに対応します。これは、dba_saga_participant_setビューに反映されます。Travel Coordinator PDB:
SELECT id, participant, status FROM dba_saga_participant_set WHERE id='abc123';ID 参加者 ステータス abc123TravelAgencyCommitted