Coba lagi
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.
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 | Default |
---|---|---|---|
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 |
max-interval | Angka positif dalam detik yang menentukan interval tunggu maksimum antara percobaan ulang. Ini digunakan untuk mengimplementasikan algoritme percobaan ulang eksponensial. Ekspresi kebijakan diizinkan. | No | 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. | No | T/A |
first-fast-retry | Boolean. Jika disetel ke true , percobaan ulang pertama akan segera dilakukan. Ekspresi kebijakan diizinkan. |
No | false |
Waktu tunggu untuk kueri
Jika hanya
interval
yang ditentukan, percobaan ulang interval tetap dilakukan.Saat hanya
interval
dandelta
yang 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
, dandelta
yang 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
interval
dandelta
ditetapkan ke 10 detik, danmax-interval
ditetapkan 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 retry
ini mungkin berisi kebijakan lain sebagai elemen turunannya.
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
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-interval
maksimum .
<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>
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
- Toolkit kebijakan Azure API Management
- Kebijakan penulis menggunakan Microsoft Copilot di Azure