Library Klien Cloud untuk Java menggunakan percobaan ulang untuk menangani kegagalan sementara yang tidak terduga (yaitu, server tidak tersedia untuk sementara). Beberapa upaya dapat menghasilkan respons yang berhasil dari server.
Nilai percobaan ulang default dipilih oleh tim yang mengoperasikan layanan cloud. Nilai percobaan ulang ini dikonfigurasi per RPC. Layanan dapat memilih untuk hanya mengaktifkan percobaan ulang untuk subset RPC. Setiap RPC untuk layanan dapat dikonfigurasi secara berbeda.
Parameter percobaan ulang
Library klien memiliki dua jenis parameter percobaan ulang untuk dikonfigurasi:
- Kode Status Percobaan Ulang: Kumpulan kode status untuk dicoba ulang.
- Waktu Tunggu Percobaan Ulang atau Batas Upaya: RetrySettings yang dapat dikonfigurasi RetrySettings
Lokasi konfigurasi Percobaan Ulang RPC default
Konfigurasi percobaan ulang default ditentukan dalam file {Client}StubSettings yang dihasilkan. Dengan menggunakan RPC ExportAssets di Java-Asset v3.64.0 sebagai contoh, konfigurasi percobaan ulang default ditentukan di tempat berikut:
Kode Status Percobaan Ulang: dikonfigurasi dalam file
AssetServiceStubSettings.java. Contoh: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();Parameter Percobaan Ulang: Dikonfigurasi dalam file
AssetServiceStubSettings.java. Contoh: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();
Kedua konfigurasi dipetakan ke RPC dalam file AssetServiceStubSettings.java. Contoh:
builder
.exportAssetsSettings()
.setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("no_retry_0_codes"))
.setRetrySettings(RETRY_PARAM_DEFINITIONS.get("no_retry_0_params"));
Konsep percobaan ulang library klien
Mengaktifkan percobaan ulang memungkinkan RPC mencoba beberapa kali untuk mencoba dan mencapai panggilan yang berhasil. Panggilan yang berhasil adalah respons dari server yang menampilkan Kode Status OK (dari gRPC) atau Kode Status 2xx (dari HttpJson).
Upaya versus operasi
Konfigurasi RetrySettings berikut mengubah setelan percobaan ulang untuk upaya dan operasi RPC:
settings =
RetrySettings.newBuilder()
.setInitialRetryDelayDuration(Duration.ofMillis(100L))
.setRetryDelayMultiplier(1.3)
.setMaxRetryDelayDuration(Duration.ofMillis(60000L))
.setInitialRpcTimeoutDuration(Duration.ofMillis(60000L))
.setRpcTimeoutMultiplier(1.0)
.setMaxRpcTimeoutDuration(Duration.ofMillis(60000L))
.setTotalTimeoutDuration(Duration.ofMillis(60000L))
.build();
Upaya RPC adalah upaya individual yang dilakukan dan operasi RPC adalah kumpulan semua upaya yang dilakukan. Satu pemanggilan RPC akan memiliki satu atau beberapa upaya dalam satu operasi.
Batas RPC Individual (upaya) dikontrol oleh setelan berikut:
setInitialRetryDelayDuration: Penundaan sebelum upaya pertama.setRetryDelayMultiplier: Pengali penundaan yang diterapkan di antara setiap upaya.