Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
BERLAKU UNTUK: Semua tingkatAN API Management
Kebijakan retry menjalankan kebijakan turunannya satu kali dan kemudian mencoba kembali eksekusinya hingga percobaan ulang condition menjadi false atau coba lagi count habis.
Kebijakan ini retry mungkin berisi kebijakan lain sebagai elemen turunannya, kecuali untuk wait kebijakan.
Catatan
Tetapkan elemen kebijakan dan elemen turunan dalam urutan yang disediakan dalam pernyataan kebijakan. Pelajari lebih lanjut cara mengatur atau mengedit kebijakan API Management.
Pernyataan kebijakan
<retry
condition="Boolean expression or literal"
count="number of retry attempts"
interval="retry interval in seconds"
max-interval="maximum retry interval in seconds"
delta="retry interval delta in seconds"
first-fast-retry="boolean expression or literal">
<!-- One or more child policies. No restrictions. -->
</retry>
Atribut
| Atribut | Deskripsi | Wajib diisi | Bawaan |
|---|---|---|---|
| kondisi | Boolean. Menentukan apakah percobaan ulang harus dihentikan (false) atau dilanjutkan (true). Ekspresi kebijakan diizinkan. |
Ya | T/A |
| jumlah | Angka positif antara 1 dan 50 menentukan jumlah percobaan ulang yang akan dicoba. Ekspresi kebijakan diizinkan. | Ya | T/A |
| interval | Angka positif dalam detik yang menentukan interval tunggu antara percobaan ulang. Ekspresi kebijakan diizinkan. | Ya | T/A |
| interval maks | Angka positif dalam detik yang menentukan interval tunggu maksimum antara percobaan ulang. Ini digunakan untuk mengimplementasikan algoritme percobaan ulang eksponensial. Ekspresi kebijakan diizinkan. | Tidak. | T/A |
| delta | Angka positif dalam detik yang menentukan kenaikan interval tunggu. Ini digunakan untuk mengimplementasikan algoritme percobaan ulang linier dan eksponensial. Ekspresi kebijakan diizinkan. | Tidak. | T/A |
| pertama-cepat-coba lagi | Boolean. Jika disetel ke true, percobaan ulang pertama akan segera dilakukan. Ekspresi kebijakan diizinkan. |
Tidak. | false |
Waktu tunggu untuk kueri
Jika hanya
intervalyang ditentukan, percobaan ulang interval tetap dilakukan.Saat hanya
intervaldandeltayang ditentukan, algoritma coba lagi interval linear akan digunakan. Waktu tunggu di antara coba lagi semakin meningkat menurut rumus berikut ini:interval + (count - 1)*delta.Saat hanya
interval,max-interval, dandeltayang ditetapkan, algoritma coba lagi interval eksponensial akan digunakan. Waktu tunggu di antara coba lagi semakin meningkat menurut rumus berikut ini:interval + (2^(count - 1)) * random(delta * 0.8, delta * 1.2), hingga interval maksimum yang ditetapkan olehmax-interval.Sebagai contoh, saat
intervaldandeltaditetapkan ke 10 detik, danmax-intervalditetapkan ke 100 detik, rata-rata waktu tunggu di antara coba lagi akan meningkat dengan interval sebagai berikut: 10 detik, 20 detik, 40 detik, 80 detik, dan 100 detik untuk coba lagi yang tersisa.
Elemen
Kebijakan ini retry mungkin berisi kebijakan lain sebagai elemen turunannya, kecuali untuk wait kebijakan.
Penggunaan
- Bagian kebijakan: masuk, keluar, backend, saat terjadi kesalahan
- Cakupan kebijakan: global, ruang kerja, produk, API, operasi
- Gateway: klasik, v2, konsumsi, dihost sendiri, ruang kerja
Catatan penggunaan
- Kebijakan menjalankan kebijakan turunan di
retryblok sebelum mengevaluasiconditionuntuk menjalankan upaya coba lagi pertama.
Contoh
Meminta penerusan dengan coba lagi eksponensial
Dalam contoh berikut, penerusan permintaan dicoba ulang hingga sepuluh kali menggunakan algoritme percobaan ulang eksponensial. Karena first-fast-retry diatur ke false, semua upaya coba lagi tunduk pada waktu tunggu coba lagi yang meningkat secara eksponensial (dalam contoh ini, sekitar 10 detik, 20 detik, 40 detik, ...), hingga penantian max-intervalmaksimum .
<retry
condition="@(context.Response.StatusCode == 500)"
count="10"
interval="10"
max-interval="100"
delta="10"
first-fast-retry="false">
<forward-request buffer-request-body="true" />
</retry>
Kirim permintaan setelah permintaan awal gagal
Dalam contoh berikut, mengirim permintaan ke URL selain backend yang ditentukan dicoba ulang hingga tiga kali jika koneksi terputus/kehabisan waktu, atau permintaan menghasilkan kesalahan sisi server. Sejak first-fast-retry diatur dengan benar, coba lagi pertama dijalankan segera setelah kegagalan permintaan awal. Perhatikan bahwa send-request harus diatur ignore-error dengan benar agar response-variable-name menjadi null jika terjadi kesalahan.
<retry
condition="@(context.Variables["response"] == null || ((IResponse)context.Variables["response"]).StatusCode >= 500)"
count="3"
interval="1"
first-fast-retry="true">
<send-request
mode="new"
response-variable-name="response"
timeout="3"
ignore-error="true">
<set-url>https://api.contoso.com/products/5</set-url>
<set-method>GET</set-method>
</send-request>
</retry>
Beralih backend saat kesalahan diterima
Dalam contoh berikut, permintaan awal dikirim ke backend utama.
429 Too Many Requests Jika kode status respons dikembalikan, permintaan akan segera dicoba dan diteruskan ke backend sekunder.
<backend>
<retry
condition="@(context.Response != null && context.Response.StatusCode == 429)"
count="1"
interval="1"
first-fast-retry="true">
<set-variable name="attempt-count" value="@(context.Variables.GetValueOrDefault<int>("attempt-count", 0)+1)" />
<set-backend-service backend-id="@(context.Variables.GetValueOrDefault<int>("attempt-count") < 2 ? "primary-backend" : "secondary-backend" )" />
<forward-request />
</retry>
</backend>
Petunjuk / Saran
Sebagai alternatif, Anda dapat mengonfigurasi sumber daya backend dengan aturan pemutus sirkuit untuk mendeteksi kondisi kegagalan dan kumpulan seimbang beban yang mendistribusikan permintaan di beberapa backend.
Kebijakan terkait
Konten terkait
Untuk informasi selengkapnya tentang bekerja dengan kebijakan, lihat:
- Tutorial: Mengubah dan melindungi API Anda
- Referensi Kebijakan untuk daftar lengkap pernyataan kebijakan dan pengaturannya
- Ekspresi kebijakan
- Mengatur atau mengedit kebijakan
- Menggunakan kembali konfigurasi kebijakan
- Repositori cuplikan kebijakan
- Repositori taman bermain kebijakan
- Toolkit kebijakan Azure API Management
- Mendapatkan bantuan Copilot untuk membuat, menjelaskan, dan memecahkan masalah kebijakan