Java を使用して再試行ポリシーを実装する
クラウドで実行されるアプリケーション、またはリモート サービスやリソースと通信するアプリケーションは、一時的な障害を処理できる必要があります。 これらのアプリケーションでは、ネットワーク接続の一時的な喪失、サービスまたはリソースがビジーのときの要求のタイムアウト、またはその他の要因により、障害が発生することがよくあります。 開発者は、安定性と回復性を向上させるため、一時的な障害を透過的に処理するようにアプリケーションを構築する必要があります。
この記事では、Java 用 Azure Storage クライアント ライブラリを使用して、Azure Blob Storage に接続するアプリケーションの再試行ポリシーを構成する方法について説明します。 再試行ポリシーは、失敗した要求をアプリケーションが処理する方法を定義しており、アプリケーションのビジネス要件とエラーの性質に合わせて常に調整する必要があります。
再試行オプションを構成する
Blob Storage の再試行ポリシーはプログラムで構成され、さまざまなサービス要求やシナリオに再試行オプションを適用する方法を制御します。 たとえば、ユーザーの操作に基づいて要求を発行する Web アプリでは、応答性を高め、エラーが発生したときにユーザーに通知するために、再試行回数が少なく、遅延が短いポリシーを実装する場合があります。 または、バックグラウンドでバッチ要求を実行するアプリやコンポーネントでは、要求が正常に完了するための時間があるように、再試行回数を増やし、エクスポネンシャル バックオフ戦略を使用する場合があります。
次の表は、RequestRetryOptions インスタンスの作成時に使用できるパラメーターと、その型、簡単な説明、変更を加えなかった場合の既定値を一覧で示したものです。 アプリのニーズに合わせて、これらのプロパティの値を事前に調整しておく必要があります。
プロパティ | タイプ | 説明 | 規定値 |
---|---|---|---|
retryPolicyType |
RetryPolicyType | 省略可能。 再試行の遅延を計算するために使用する方法です。 | EXPONENTIAL |
maxTries |
Integer | 省略可能。 中断されるまでの最大再試行回数。 | 4 |
tryTimeoutInSeconds |
Integer | 省略可能。 要求が取り消され、失敗したと見なされるまでの許容最大時間。 このタイムアウトは、エンドツーエンドで操作全体に対してではなく、操作要求に適用される点に注意してください。 この値は、ホスト マシンで使用できる帯域幅と、ストレージ サービスへの近接性に基づいている必要があります。 最初は、予想されるペイロード サイズの MB あたり 60 秒にするのが適切であると考えられます。 | Integer.MAX_VALUE (秒) |
retryDelayInMs |
Long | 省略可能。 操作を再試行するまでに使用する遅延の時間を指定します。 | EXPONENTIAL の場合は 4 ミリ秒、FIXED の場合は 30 ミリ秒 |
maxRetryDelayInMs |
Long | 省略可能。 操作を再試行するまでに許容される最大遅延時間を指定します。 | 120 ミリ秒 |
secondaryHost |
String | 省略可能。 要求を再試行する対象のセカンダリ ストレージ アカウント エンドポイント。 この値を設定する前に、古く、整合性がない可能性のあるデータの読み取りに関する問題を理解しておく必要があります。 詳しくは、「geo 冗長性を使用して高可用性アプリケーションを設計する」をご覧ください。 | なし |
次のコード例では、RequestRetryOptions のインスタンスで再試行オプションを構成し、それを BlobServiceClientBuilder
に渡してクライアント オブジェクトを作成します。
RequestRetryOptions retryOptions = new RequestRetryOptions(RetryPolicyType.FIXED, 2, 3, 1000L, 1500L, null);
BlobServiceClient client = new BlobServiceClientBuilder()
.endpoint("https://<storage-account-name>.blob.core.windows.net/")
.credential(credential)
.retryOptions(retryOptions)
.buildClient();
この例では、BlobServiceClient
オブジェクトから発行された各サービス要求で、RequestRetryOptions
インスタンス内で定義された再試行オプションを使います。 このポリシーは、クライアント要求に適用されます。 アプリのニーズに基づいて、サービス クライアントに対してさまざまな再試行戦略を構成できます。