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 dan delta 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, dan delta 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 oleh max-interval.

    Sebagai contoh, saat interval dan delta ditetapkan ke 10 detik, dan max-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

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>

Untuk informasi selengkapnya tentang bekerja dengan kebijakan, lihat: