دوبارہ کوشش
یہ فصل Go Resty درخواستوں کی دوبارہ کوشش کی میکانیزم کو متعارف کراتی ہے۔
Resty دوبارہ کوشش کے بعد فی کوشش دہائی میں اضافہ کے لئے بیک آف استعمال کرتا ہے۔
استعمال کا مثال:
// ایک Resty کلائنٹ بنائیں
client := resty.New()
// دوبارہ کوشش شمار کنفیگریشن ہر کلائنٹ پر ہوتی ہے
client.
// دوبارہ کوشش کو فعال کرنے کے لئے غیر صفر دوبارہ کوشش شمار تنظیم کریں
SetRetryCount(3).
// آپ ابتدائی دوبارہ کوشش انتظار کا وقت کسٹمائز کرسکتے ہیں۔
// پہلے 100 ملی سیکنڈز کی پیش فرض ہے۔
SetRetryWaitTime(5 * time.Second).
// MaxWaitTime بھی اووررائڈ کی جا سکتی ہے۔
// پہلے 2 سیکنڈز کی پیش فرض ہے۔
SetRetryMaxWaitTime(20 * time.Second).
// دوبارہ کوشش کے لئے RetryAfter کو تنظیم کرنا
// زیر استعمال کال بیک کا وقت بیچ دوباروں کے درمیان کا وقت شمار کرنے والے کول بیک کا تفاعل حساب کرنے کے لئے ہے۔
// پہلے عدم موجود فیصلہ (nil) ہےکہ توانائی سے بڑھانے والے دوبارہ کوشش وقت اور ہلکی تجویز ہو گی۔
SetRetryAfter(func(client *resty.Client, resp *resty.Response) (time.Duration, error) {
return 0, errors.New("Quota exceeded")
})
پیش فرض طور پر، ریسٹی ، جو تنصیب کے دوران غیر صفر خطا دار جوابات کو دوبارہ کوشش کرے گی۔ لہذا، اوپر دی گئی ترتیبات ریسٹی کو دوبارہ کوشش کرائے گی جو غیر صفر خطا دار جوابات دیتی ہیں، جبکہ ہر کوشش کے بعد دیر ترتیب دی جائے گی، یہاں تک کہ حد سے زیادہ نہیں ہوگی۔
آپ کلائنٹ کے لئے مخصوص دوبارہ کوشش شرائط بھی فراہم کرسکتے ہیں۔
// ایک Resty کلائنٹ بنائیں
client := resty.New()
client.AddRetryCondition(
// RetryConditionFunc type کو دوبارہ کوشش کی حالت کے لئے استعمال کیا جاتا ہے
// انپٹ: غیر صفر جواب یا درخواست کی تنفیذی خطا
func(r *resty.Response, err error) bool {
return r.StatusCode() == http.StatusTooManyRequests
},
)
اوپر دی گئی مثال ریسٹی کو 429 Too Many Requests
حالت کو دیتی ہوئی درخواستوں کو دوبارہ کوشش کرائے گی۔ اس بات کا خاص خیال رکھنا ضروری ہے کہ جب آپ AddRetryCondition
کے ذریعے شرائط مخصوص کرتے ہیں، تو یہ پہلے ترتیب کے عمل کو نقل کر دیتا ہے، جو درخواست کے دوران خطا سے ملاقات کرنے والی دوبارہ کوشش ہوتی ہے، اگر آپ چاہتے ہیں کہ درخواست کے دوران خطا کے دوران پہلے ترتیب کی طرح دوبارہ کوشش کریں، تو آپ کو مندرجہ ذیل کا تنظیم کرنا ہوگا:
// ایک Resty کلائنٹ بنائیں
client := resty.New()
client.AddRetryCondition(
func(r *resty.Response, err error) bool {
// "err != nil" شامل کریں "err != nil" تاکہ درخواست کے دوران خطا سے ملاقات کرنے کے پہلے ترتیب کو نقل کرنے کا دوبارہ محاکمہ کر سکیں۔
return err != nil || r.StatusCode() == http.StatusTooManyRequests
},
)
متعدد دوبارہ کوشش شرائط شامل کی جا سکتی ہیں۔ اس بات کا خاص خیال رکھنا ضروری ہے کہ اگر متعدد شرائط مخصوص کی گئی ہوں، تو جتنی بھی شرائط کی گئی ہوں، جیسے ہی کسی بھی شرط پوری ہوتی ہے، ایک دوبارہ کوشش کرائی جائے گی۔
آپ یہ بھی استعمال کرسکتے ہیں کہ resty.Backoff(...)
کا استعمال کریں تاکہ تشکیل دی گئی دوبارہ کوشش سیناریو کو عمل میں لایا جائے۔