私は複数のhttp要求が行われるアクションを持つAzureアプリケーション(AzureApi1)を持っています。操作は、複数のテーブルにデータをAzure SQL DBに挿入します。Azure分散トランザクションでは、1つのhttp呼び出しが失敗した場合にフル操作をロールバックする最良の方法は何ですか?
次に、同じコード内から外部API呼び出し(ExApi)を行います。外部呼び出しの結果を使用して、他のテーブルを挿入/更新します。これはAzureにはありません。
次に、最初のリソースグループと同じリソースグループにある別のapi(AzureApi2)を呼び出し、同じリソースグループ内にある別のAzure Sql Dbにデータを挿入します。
私は、AzureApi1とAzureApi2の両方でTransactionScopeを使用していますが、これらは個別に問題なく動作します。しかし、その間に1つの外部APIがあり、私の制御下にないので、そのAPI呼び出しに何らかの障害が発生した場合は、完全な操作をロールバックする必要があります。しかし、現在、最初のAPIは、2回目のapi呼び出しが異なるhttp呼び出しであるため、正しくロールバックされています。最初のAPI呼び出しのトランザクションスコープには該当しません。 私は2番目のSql Dbからデータをロールバックする方法も必要です。
このような状況で手動でロールバックするのに最適な方法は何ですか。
こんにちは@お返事ありがとうございます。このソリューションは素晴らしいですが、時間とリソースの面ではやや高価です。特に、1つのhttpリクエストの入力が他のhttpレスポンスの結果に依存するこのケースでは、この解決策が適用可能かどうかわかりません。 –
このソリューションは、一般的な分散トランザクションで使用できます。分散トランザクションでは、状態を監視するコーディネータが必要です。分散トランザクションを使用するのは、アプリケーションの各ブランチの一貫性を確保するためです。 – Amor