Java 用 Cloud クライアント ライブラリは、再試行を使用して、予期しない一時的な障害(サーバーが一時的に利用できない)を処理します。複数回試行することで、サーバーから成功レスポンスが返されることがあります。
デフォルトの再試行値は、クラウド サービスを運用するチームによって選択されます。これらの再試行値は RPC ごとに構成されます。サービスは、RPC のサブセットに対してのみ再試行を有効にできます。サービスの RPC ごとに異なる構成が設定されている可能性があります。
再試行パラメータ
クライアント ライブラリには、構成する再試行パラメータが 2 種類あります。
- 再試行ステータス コード: 再試行するステータス コードのセット。
- 再試行タイムアウトまたは試行の上限: 上限を定義する構成可能な RetrySettings 。
デフォルトの RPC 再試行構成の場所
デフォルトの再試行構成は、生成された {Client}StubSettings ファイルで定義されます。Java-Asset v3.64.0 の ExportAssets RPC を例として使用すると、デフォルトの再試行構成は次の場所に定義されます。
再試行ステータス コード:
AssetServiceStubSettings.javaファイルで構成されます。例:ImmutableMap.Builder<String, ImmutableSet<StatusCode.Code>> definitions = ImmutableMap.builder(); definitions.put("no_retry_0_codes", ImmutableSet.copyOf(Lists.<StatusCode.Code>newArrayList())); // ... More StatusCode configurations RETRYABLE_CODE_DEFINITIONS = definitions.build();再試行パラメータ:
AssetServiceStubSettings.javaファイルで構成されます。 例:ImmutableMap.Builder<String, RetrySettings> definitions = ImmutableMap.builder(); RetrySettings settings = null; settings = RetrySettings.newBuilder() .setInitialRpcTimeoutDuration(Duration.ofMillis(60000L)) .setRpcTimeoutMultiplier(1.0) .setMaxRpcTimeoutDuration(Duration.ofMillis(60000L)) .setTotalTimeoutDuration(Duration.ofMillis(60000L)) .build(); definitions.put("no_retry_0_params", settings); // ... More RetrySettings configurations RETRY_PARAM_DEFINITIONS = definitions.build();
どちらの構成も、AssetServiceStubSettings.java ファイルの RPC にマッピングされます。例:
builder
.exportAssetsSettings()
.setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("no_retry_0_codes"))
.setRetrySettings(RETRY_PARAM_DEFINITIONS.get("no_retry_0_params"));
クライアント ライブラリの再試行のコンセプト
再試行を有効にすると、RPC は複数回試行して呼び出しを成功させることができます。呼び出しが成功すると、サーバーから OK ステータス コード(gRPC から)または 2xx ステータス コード(HttpJson から)が返されます。
試行とオペレーション
次の RetrySettings 構成では、RPC の試行とオペレーションの両方の再試行設定が変更されます。
settings =
RetrySettings.newBuilder()
.setInitialRetryDelayDuration(Duration.ofMillis(100L))
.setRetryDelayMultiplier(1.3)
.setMaxRetryDelayDuration(