पुनः प्रयास

यह अध्याय Go Resty अनुरोधों की पुनः प्रयास यांत्रिकता को पेश करता है।

Resty पुनः प्रयास के बाद पुनः प्रयास के बाद पुनः प्रयास बढ़ाने के लिए बैकऑफ का उपयोग करता है।

उपयोग का उदाहरण:

// एक Resty ग्राहक बनाएं
client := resty.New()

// पुनः प्रयास गिनती कॉन्फ़िगरेशन प्रत्येक ग्राहक पर है
client.
    // पुनः प्रयास सक्षम करने के लिए एक गैर-शून्य पुनः प्रयास गिनती सेट करें
    SetRetryCount(3).
    // आप प्रारंभिक पुनः प्रयास प्रतीक्षा समय को अनुकूलित कर सकते हैं।
    // डिफ़ॉल्ट 100 मिलीसेकंड है।
    SetRetryWaitTime(5 * time.Second).
    // MaxWaitTime भी अधिराई जा सकती है।
    // डिफ़ॉल्ट 2 सेकंड है।
    SetRetryMaxWaitTime(20 * time.Second).
    // पुनः प्रयास के बीच प्रतीक्षा समय के लिए कॉलबैक फ़ंक्शन की गणना करने के लिए RetryAfter सेट करें।
    // डिफ़ॉल्ट मान (निल) का अर्थ है कि विस्तारणीय बढ़ती वापसिक समय और जिटर का उपयोग करना।
    SetRetryAfter(func(client *resty.Client, resp *resty.Response) (time.Duration, error) {
        return 0, errors.New("क्वोटा पार हो गई")
    })

डिफ़ॉल्ट रूप से, resty उन अनुरोधों को पुनः प्रयास करेगा जो कार्यान्वयन के दौरान गैर-शून्य त्रुटियों को वापस लेते हैं। इसलिए, उपरोक्त सेटिंग्स resty को पुनः प्रयास करने के लिए बनाएंगे जो प्रत्येक प्रयास के बाद देरी बढ़ाते हुए गैर-शून्य त्रुटियों को वापस लाते हैं, अधिकतम 3 पुनः प्रयास तक।

आप ग्राहक के लिए कस्टम पुनः प्रयास शर्तें भी प्रदान कर सकते हैं:

// एक Resty ग्राहक बनाएं
client := resty.New()

client.AddRetryCondition(
    // RetryConditionFunc प्रकार का उपयोग पुनः प्रयास शर्त फ़ंक्शनों के लिए होता है
    // इनपुट: गैर-शून्य प्रतिक्रिया या अनुरोध कार्यान्वयन त्रुटि
    func(r *resty.Response, err error) bool {
        return r.StatusCode() == http.StatusTooManyRequests
    },
)

उपरोक्त उदाहरण रेस्टी को 429 बहुत सारे अनुरोध स्थिति को समाप्त होने वाले अनुरोधों को पुनः प्रयास करेगा। महत्वपूर्ण है कि जब आप AddRetryCondition का उपयोग करके शर्तें निर्धारित करते हैं, तो यह डिफ़ॉल्ट पुनः प्रयास व्यवहार को अधिराई करेगा, जो अनुरोध प्रक्रिया के दौरान त्रुटियों का सामना करते समय पुनः प्रयास करना है। यदि आप त्रुटियों का सामना करते समय डिफ़ॉल्ट पुनः प्रयास व्यवहार के सिमुलेट करना चाहते हैं, तो निम्न रूप से इसे कॉन्फ़िगर करना होगा:

// एक Resty ग्राहक बनाएं
client := resty.New()

client.AddRetryCondition(
    func(r *resty.Response, err error) bool {
        // "err != nil" शामिल करें कि अनुरोध प्रक्रिया के दौरान त्रुटियों का सामना करते समय डिफ़ॉल्ट पुनः प्रयास व्यवहार का सिमुलेट करे।
        return err != nil || r.StatusCode() == http.StatusTooManyRequests
    },
)

कई पुनः प्रयास शर्तें जोड़ी जा सकती हैं। यह महत्वपूर्ण है कि यदि कई शर्तें निर्धारित की जाती हैं, तो कम से कम किसी भी शर्त को पूरा करते ही, एक पुनः प्रयास किया जाएगा।

आप भी प्रतियोगी पुनः प्रयास स्थितियों को लागू करने के लिए resty.Backoff(...) का उपयोग कर सकते हैं।