পুনঃচেষ্টা
এই অধ্যায়টি Go 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("কোটা অতিশেষেপ্ত")
})
ডিফল্টভাবে, রেস্টি কাজের সময় যে কোনও সাধারণ ত্রুটি পেলে পুনঃচেষ্টা করবে। তাই, উপরের সেটিংস রেস্টি কে পুনঃচেষ্টা করতে বাধ্য করবে যেসব ত্রুটি রিটার্ন করে, গুনতন্ত পরবর্তী প্রচেষ্টা পার্যে অগ্রাহ্য তত্ত্ব অনুযায়ী, 3টির চেয়ে বেশি পুনঃচেষ্টা দেবে, প্রতিটি চেষ্টা পরে নিঃশেষ বাড়াতে পুনঃচেষ্টা অপেক্ষার মেয়াদ।
আপনি ক্লায়েন্টের জন্য কাস্টম পুনঃচেষ্টা শর্ত প্রদান করতেও পারেন:
// Create a Resty client
client := resty.New()
client.AddRetryCondition(
// RetryConditionFunc type হলো পুনঃচেষ্টা শর্ত ফাংশনের জন্য ব্যবহৃত
// ইনপুট: গৈর-শূন্য রেসপন্স অথবা অনুরোধ না সঞ্চালনের ত্রুটি
func(r *resty.Response, err error) bool {
return r.StatusCode() == http.StatusTooManyRequests
},
)
উপরোক্ত উদাহরণে রেস্টির অনুরোধ পুনঃচেষ্টা করবে যদি 429 Too Many Requests
স্ট্যাটাস কোডে শেষ হয়। গুনতন্ত করা উচিত যে, যখন আপনি AddRetryCondition
ব্যবহার করেন, যা রিকুয়ায়ার্ব প্রসেসে ত্রুটি সংলগ্ন হলে পুনঃচেষ্টা এমনভাবে অতিরিক্ত হবে, যা পুনঃপ্রক্রিয়া সময় ব্যবহার না করে এর ডিফল্ট ট্রাই অবস্থা সিমুলেট করতেই নিচের অনুযায়ী কনফিগার করা দরকার:
// Create a Resty client
client := resty.New()
client.AddRetryCondition(
func(r *resty.Response, err error) bool {
// ডিফল্ট পুনঃচেষ্টা প্রক্রিয়ার সময় ত্রুটি পেলে "err != nil" অন্তর্ভুক্ত করুন
return err != nil || r.StatusCode() == http.StatusTooManyRequests
},
)
একাধিক পুনঃচেষ্টা শর্ত যোগ করা যায়। গুনতন্ত করা গুরুত্বপূর্ণ যে, যদি একাধিক শর্ত নির্ধারণ করা হয়, তবে একবার যেকোনও একটি শর্ত পূরণ করলে পুনঃচেষ্টা করা হবে।
আপনি আরওও ব্যবহার করতে পারেন resty.Backoff(...)
to arbitraly.