これらの質問に対する答えはありませんが、特定のケースに固有の方法を作成しました。したがって、同じケースでトランザクションが必要な場合は、ここに投稿してください。
私の場合、データベース(またはサービスとしても実行されているインデクサー)の現在のエントリに変更はありませんが、システムのさまざまな場所に新しいエントリしかなかったため、誤った失敗は有害ではありませんでしたが、誤った成功はありました. したがって、私の特定のケースでは、次の戦略に従いました。
私。すべてのリソースは、データベースの行にトランザクション ID を追加します。コーディネーターがリソースに要求する最初のフェーズでは、すべてのリソースが、コーディネーターによって生成されたトランザクション ID を使用してデータベースにエントリを作成します。
ii. フェーズ 1 の後、リソースがデータベースに変更を加えたことを意味する肯定的な応答がすべてのリソースから返されると、コーディネーターは自身のログにトランザクションが成功したというエントリを作成し、それをリソースに伝えます。すべてのリソースは、挿入されたデータの行でトランザクション ステータスを成功にします。
iii. データベースを検索し、コーディネーターにステータスを問い合わせてトランザクションのステータスを修正するサービスが継続的に実行されます。エントリまたは失敗エントリがない場合、トランザクションは失敗ステータスを返し、サービスで同じステータスが更新されます。データをフェッチするとき、データベースに失敗ラベルを持つエントリがあれば、常にコーディネーターでトランザクション ステータスをチェックし、失敗のエントリがない場合は結果をフィルタリングします。したがって、情報がない、または障害情報があるデータ エントリは提供されません。したがって、結果は常に一貫しています。
この戦略は、私の場合の原子性への道を提供します。