Tekrar Dene
Bu bölüm, Go Resty isteklerinin tekrar deneme mekanizmasını tanıtır.
Resty, her tekrar denemeden sonra tekrar aralığını artırmak için geri çekilmeyi kullanır.
Kullanım örneği:
// Bir Resty istemcisi oluştur
client := resty.New()
// Tekrar sayısı yapılandırması her istemci üzerinde yapılır
client.
// Tekrarları etkinleştirmek için sıfırdan farklı bir tekrar sayısı ayarlayın
SetRetryCount(3).
// Başlangıç tekrar bekleme süresini özelleştirebilirsiniz.
// Varsayılan değer 100 milisaniyedir.
SetRetryWaitTime(5 * time.Second).
// MaxWaitTime ayrıca geçersiz kılınabilir.
// Varsayılan değer 2 saniyedir.
SetRetryMaxWaitTime(20 * time.Second).
// RetryAfter, tekrarlar arasındaki bekleme süresi için geri çağrı fonksiyonunu hesaplamak için ayarlanır.
// Varsayılan değer (nil), üs olarak artan bekleme süresi ve jitter'ı kullanmak anlamına gelir.
SetRetryAfter(func(client *resty.Client, resp *resty.Response) (time.Duration, error) {
return 0, errors.New("Kota aşıldı")
})
Varsayılan olarak, resty, çalıştırma sırasında sıfırdan farklı hata kodları dönen istekleri tekrar dener. Bu nedenle yukarıdaki ayarlar, resty'yi her denemeden sonra gecikmeyi artırarak sıfırdan farklı hata kodları dönen istekleri tekrar denemeye zorlayacaktır, en fazla 3 tekrar yapılır.
Ayrıca istemci için özel tekrar koşulları da sağlayabilirsiniz:
// Bir Resty istemcisi oluştur
client := resty.New()
client.AddRetryCondition(
// RetryConditionFunc türü, tekrar koşulu fonksiyonları için kullanılır
// Giriş: sıfırdan farklı Yanıt VEYA istek yürütme hatası
func(r *resty.Response, err error) bool {
return r.StatusCode() == http.StatusTooManyRequests
},
)
Yukarıdaki örnek, 429 Too Many Requests
durum kodu ile biten istekleri tekrar deneyimine neden olur. AddRetryCondition
kullanarak koşulları belirttiğinizde, istek işlemi sırasında hata ile karşılaşıldığında varsayılan tekrar davranışını geçersiz kılacaktır. Hata ile karşılaşıldığında varsayılan tekrar davranışını elde etmek istiyorsanız, aşağıdaki gibi yapılandırmanız gerekir:
// Bir Resty istemcisi oluştur
client := resty.New()
client.AddRetryCondition(
func(r *resty.Response, err error) bool {
// "err != nil" ı dahil etmek, hata ile karşılaşıldığında varsayılan tekrar davranışını taklit etmek içindir.
return err != nil || r.StatusCode() == http.StatusTooManyRequests
},
)
Birden fazla tekrar koşulu eklenebilir. Birden fazla koşul belirtildiğinde, koşullardan herhangi biri sağlandığında bir tekrar yapılır.
Ayrıca herhangi bir tekrar senaryosunu uygulamak için resty.Backoff(...)
kullanabilirsiniz.