इसे छोड़कर कंटेंट पर जाएं

रिट्राई लूप्स और बैकऑफ़

MirApi Gateway का रिट्राई इंजन विफल अनुरोधों को एक्सपोनेंशियल बैकऑफ़ और जिटर के साथ स्वचालित रूप से पुनः भेजता है, जिससे आपके इंटीग्रेशन को अस्थायी अपस्ट्रीम विफलताओं — टाइमआउट, 5xx एरर और कनेक्शन ड्रॉप — से सुरक्षा मिलती है।

रिट्राई कैसे काम करता है

Section titled “रिट्राई कैसे काम करता है”

जब कोई अपस्ट्रीम अनुरोध विफल होता है (कनेक्शन एरर या 5xx रिस्पॉन्स), तो गेटवे प्रतीक्षा करता है और स्वचालित रूप से पुनः प्रयास करता है। देरी इस फ़ॉर्मूले का पालन करती है:

delay = base_delay x 2^attempt + random_jitter (up to 50% of delay)

प्रति प्रयास अधिकतम देरी 10 सेकंड तक सीमित है। यदि किसी रिट्राई प्रयास में सफलता मिलती है, तो गेटवे क्लाइंट को रिस्पॉन्स डायग्नोस्टिक हेडर X-Rescued: retry के साथ लौटाता है। X-Retry-Delay: 200ms और X-Retry-Count: 4 के साथ उदाहरण:

Initial attempt: -> fails (e.g. 503)
Retry 1: wait ~200ms + jitter -> retry
Retry 2: wait ~400ms + jitter -> retry
Retry 3: wait ~800ms + jitter -> retry
Retry 4: wait ~1600ms + jitter -> retry or give up

जिटर रिट्राई लोड को कई क्लाइंट्स में वितरित करता है ताकि वे सभी एक साथ अपस्ट्रीम को ओवरलोड न करें।

हेडरडिफ़ॉल्टविवरण
X-Retry-Count0रिट्राई प्रयासों की संख्या (0 = अक्षम, व्यावहारिक अधिकतम: 10)
X-Retry-Delay100msएक्सपोनेंशियल बैकऑफ़ के लिए बेस देरी। Go duration स्वीकार करता है: 100ms, 500ms, 1s
X-Proxy-Timeout30sकुल अनुरोध टाइमआउट। संपूर्ण HTTP ट्रांज़ेक्शन अवधि की सख्त सीमा। अधिकतम मान: 30s
X-Attempt-Timeoutप्रॉक्सी टाइमआउट जितनाप्रयास टाइमआउट। प्रत्येक व्यक्तिगत कनेक्शन प्रयास पर लागू टाइमआउट सीमा।

1. अस्थायी विफलताओं के लिए बेसिक रिट्राई

Section titled “1. अस्थायी विफलताओं के लिए बेसिक रिट्राई”

सबसे सामान्य उपयोग का मामला — 5xx या टाइमआउट पर रिट्राई:

Terminal window
curl -X POST https://proxy.mirapi.io/ \
-H "X-MirApi-Key: $MIRAPI_KEY" \
-H "X-Target-URL: https://api.stripe.com/v1/charges" \
-H "X-Identity-Key: Bearer sk_live_..." \
-H "X-Retry-Count: 3" \
-H "X-Retry-Delay: 500ms" \
-H "X-Proxy-Timeout: 5s" \
-H "X-Attempt-Timeout: 1s" \
-H "Content-Type: application/json" \
-d '{"amount": 2000, "currency": "usd", "source": "tok_visa"}'

2. आइडेम्पोटेंसी की के साथ रिट्राई (भुगतान)

Section titled “2. आइडेम्पोटेंसी की के साथ रिट्राई (भुगतान)”

भुगतान एंडपॉइंट के लिए, डुप्लीकेट चार्ज से बचने के लिए हमेशा रिट्राई को X-Proxy-Idempotency-Key के साथ जोड़ें:

Terminal window
curl -X POST https://proxy.mirapi.io/ \
-H "X-MirApi-Key: $MIRAPI_KEY" \
-H "X-Target-URL: https://api.stripe.com/v1/charges" \
-H "X-Identity-Key: Bearer sk_live_..." \
-H "X-Retry-Count: 3" \
-H "X-Retry-Delay: 1s" \
-H "X-Proxy-Timeout: 10s" \
-H "X-Attempt-Timeout: 2s" \
-H "X-Proxy-Idempotency-Key: order_789_charge_attempt_1" \
-H "Content-Type: application/json" \
-d '{"amount": 9900, "currency": "usd", "source": "tok_visa"}'
# If all 3 retries succeed at different points, only one charge is created
# because Stripe deduplicates on the forwarded Idempotency-Key

3. रिट्राई + स्मार्ट कैश फ़ॉलबैक

Section titled “3. रिट्राई + स्मार्ट कैश फ़ॉलबैक”

यदि सभी रिट्राई विफल हों, तो अंतिम कैश किया गया सफल रिस्पॉन्स परोसें:

Terminal window
curl https://proxy.mirapi.io/ \
-H "X-MirApi-Key: $MIRAPI_KEY" \
-H "X-Target-URL: https://api.exchangerate.host/latest" \
-H "X-Retry-Count: 3" \
-H "X-Retry-Delay: 200ms" \
-H "X-Smart-Cache: 300s"
# If all 3 retries fail:
# -> serves last cached exchange rates from Redis
# -> response includes: X-Rescued: cache

4. रिट्राई + फ़ेलओवर URL

Section titled “4. रिट्राई + फ़ेलओवर URL”

सभी प्राइमरी रिट्राई विफल होने के बाद, एक सेकेंडरी एंडपॉइंट आज़माएं:

Terminal window
curl -X POST https://proxy.mirapi.io/ \
-H "X-MirApi-Key: $MIRAPI_KEY" \
-H "X-Target-URL: https://primary-bank.com/api/charge" \
-H "X-Failover-URL: https://backup-bank.com/api/charge" \
-H "X-Retry-Count: 2" \
-H "X-Retry-Delay: 500ms" \
-H "X-Proxy-Timeout: 8s" \
-H "X-Attempt-Timeout: 2s" \
-H "Content-Type: application/json" \
-d '{"amount": 5000, "currency": "usd"}'
# primary fails x 2 -> tries backup bank
# response includes: X-Rescued: failover

5. AI APIs के लिए फ़ास्ट-फेल रिट्राई

Section titled “5. AI APIs के लिए फ़ास्ट-फेल रिट्राई”

लेटेंसी-संवेदनशील AI अनुरोधों के लिए, जल्दी विफल होने और तेज़ी से पुनः प्रयास करने के लिए कड़े टाइमआउट का उपयोग करें:

Terminal window
curl -X POST https://proxy.mirapi.io/ \
-H "X-MirApi-Key: $MIRAPI_KEY" \
-H "X-Target-URL: https://api.openai.com/v1/chat/completions" \
-H "X-Identity-Key: Bearer sk-proj-..." \
-H "X-Retry-Count: 2" \
-H "X-Retry-Delay: 100ms" \
-H "X-Proxy-Timeout: 8s" \
-H "X-Attempt-Timeout: 2s" \
-H "Content-Type: application/json" \
-d '{"model": "gpt-4o", "messages": [{"role": "user", "content": "Hello"}]}'

6. असिंक्रोनस रिट्राई (लंबे समय तक चलने वाले कार्य)

Section titled “6. असिंक्रोनस रिट्राई (लंबे समय तक चलने वाले कार्य)”

उन ऑपरेशन के लिए X-Webhook-Callback का उपयोग करें जहाँ अपस्ट्रीम रिकवरी में मिनट या घंटे लग सकते हैं। बैकग्राउंड वर्कर रीस्टार्ट के बाद भी रिट्राई जारी रखता है:

Terminal window
curl -X POST https://proxy.mirapi.io/ \
-H "X-MirApi-Key: $MIRAPI_KEY" \
-H "X-Target-URL: https://api.stripe.com/v1/charges" \
-H "X-Identity-Key: Bearer sk_live_..." \
-H "X-Webhook-Callback: https://your-app.com/webhook" \
-H "X-Proxy-Idempotency-Key: order_789_attempt_1" \
-H "X-Retry-Count: 5" \
-H "X-Retry-Delay: 2s" \
-d '{"amount": 9900, "currency": "usd"}'
# Returns 202 immediately
# Worker retries: 2s, 4s, 8s, 10s (capped), 10s+jitter
# POSTs result to callback when Stripe responds

बैकऑफ़ टाइमिंग संदर्भ

Section titled “बैकऑफ़ टाइमिंग संदर्भ”
प्रयासX-Retry-Delay: 100msX-Retry-Delay: 500msX-Retry-Delay: 1s
1~100ms + jitter~500ms + jitter~1s + jitter
2~200ms + jitter~1000ms + jitter~2s + jitter
3~400ms + jitter~2000ms + jitter~4s + jitter
4~800ms + jitter~4000ms + jitter~8s + jitter
5~1600ms + jitter~8000ms + jitter~10s (capped)

सभी देरियाँ अधिकतम 10 सेकंड तक सीमित हैं।