Ulangi
Bagian ini memperkenalkan mekanisme ulang permintaan Go Resty.
Resty menggunakan backoff untuk meningkatkan interval ulang setelah setiap percobaan.
Contoh penggunaan:
// Buat klien Resty
klien := resty.New()
// Konfigurasi jumlah ulang ada di setiap klien
klien.
// Tetapkan jumlah ulang yang tidak nol untuk mengaktifkan ulang
SetRetryCount(3).
// Anda dapat menyesuaikan waktu tunggu ulang awal.
// Defaultnya adalah 100 milidetik.
SetRetryWaitTime(5 * time.Second).
// MaxWaitTime juga dapat diubah.
// Defaultnya adalah 2 detik.
SetRetryMaxWaitTime(20 * time.Second).
// Tetapkan RetryAfter untuk menghitung fungsi panggilan balik untuk waktu tunggu antara ulang.
// Nilai default (nil) berarti menggunakan waktu backoff yang meningkat secara eksponensial dan jitter.
SetRetryAfter(func(client *resty.Client, resp *resty.Response) (time.Duration, error) {
return 0, errors.New("Quota exceeded")
})
Secara default, resty akan mengulangi permintaan yang mengembalikan kesalahan non-nol selama eksekusi. Oleh karena itu, pengaturan di atas akan membuat resty melakukan ulang permintaan yang mengembalikan kesalahan non-nol sambil meningkatkan penundaan setelah setiap percobaan, hingga maksimal 3 ulang.
Anda juga dapat memberikan kondisi ulang kustom untuk klien:
// Buat klien Resty
klien := resty.New()
klien.AddRetryCondition(
// Tipe RetryConditionFunc digunakan untuk fungsi kondisi ulang
// Input: Respons non-nol ATAU kesalahan eksekusi permintaan
func(r *resty.Response, err error) bool {
return r.StatusCode() == http.StatusTooManyRequests
},
)
Contoh di atas akan membuat resty melakukan ulang permintaan yang berakhir dengan kode status 429 Too Many Requests
. Penting untuk dicatat bahwa saat Anda menentukan kondisi menggunakan AddRetryCondition
, ini akan menggantikan perilaku ulang default, yaitu melakukan ulang ketika mengalami kesalahan selama proses permintaan. Jika Anda ingin mengulangi seperti perilaku default ketika mengalami kesalahan selama proses permintaan, Anda perlu mengonfigurasikannya sebagai berikut:
// Buat klien Resty
klien := resty.New()
klien.AddRetryCondition(
func(r *resty.Response, err error) bool {
// Sertakan "err != nil" untuk mensimulasikan perilaku ulang default saat menghadapi kesalahan selama proses permintaan.
return err != nil || r.StatusCode() == http.StatusTooManyRequests
},
)
Beberapa kondisi ulang dapat ditambahkan. Penting untuk dicatat bahwa jika beberapa kondisi ditentukan, selama salah satu kondisi terpenuhi, ulang akan dilakukan.
Anda juga dapat menggunakan resty.Backoff(...)
untuk mengimplementasikan skenario ulang sembarang.