रिट्राई लूप्स और बैकऑफ़
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 -> retryRetry 2: wait ~400ms + jitter -> retryRetry 3: wait ~800ms + jitter -> retryRetry 4: wait ~1600ms + jitter -> retry or give upजिटर रिट्राई लोड को कई क्लाइंट्स में वितरित करता है ताकि वे सभी एक साथ अपस्ट्रीम को ओवरलोड न करें।
आवश्यक हेडर
Section titled “आवश्यक हेडर”| हेडर | डिफ़ॉल्ट | विवरण |
|---|---|---|
X-Retry-Count | 0 | रिट्राई प्रयासों की संख्या (0 = अक्षम, व्यावहारिक अधिकतम: 10) |
X-Retry-Delay | 100ms | एक्सपोनेंशियल बैकऑफ़ के लिए बेस देरी। Go duration स्वीकार करता है: 100ms, 500ms, 1s |
X-Proxy-Timeout | 30s | कुल अनुरोध टाइमआउट। संपूर्ण HTTP ट्रांज़ेक्शन अवधि की सख्त सीमा। अधिकतम मान: 30s। |
X-Attempt-Timeout | प्रॉक्सी टाइमआउट जितना | प्रयास टाइमआउट। प्रत्येक व्यक्तिगत कनेक्शन प्रयास पर लागू टाइमआउट सीमा। |
उपयोग के मामले
Section titled “उपयोग के मामले”1. अस्थायी विफलताओं के लिए बेसिक रिट्राई
Section titled “1. अस्थायी विफलताओं के लिए बेसिक रिट्राई”सबसे सामान्य उपयोग का मामला — 5xx या टाइमआउट पर रिट्राई:
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 के साथ जोड़ें:
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-Key3. रिट्राई + स्मार्ट कैश फ़ॉलबैक
Section titled “3. रिट्राई + स्मार्ट कैश फ़ॉलबैक”यदि सभी रिट्राई विफल हों, तो अंतिम कैश किया गया सफल रिस्पॉन्स परोसें:
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: cache4. रिट्राई + फ़ेलओवर URL
Section titled “4. रिट्राई + फ़ेलओवर URL”सभी प्राइमरी रिट्राई विफल होने के बाद, एक सेकेंडरी एंडपॉइंट आज़माएं:
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: failover5. AI APIs के लिए फ़ास्ट-फेल रिट्राई
Section titled “5. AI APIs के लिए फ़ास्ट-फेल रिट्राई”लेटेंसी-संवेदनशील AI अनुरोधों के लिए, जल्दी विफल होने और तेज़ी से पुनः प्रयास करने के लिए कड़े टाइमआउट का उपयोग करें:
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 का उपयोग करें जहाँ अपस्ट्रीम रिकवरी में मिनट या घंटे लग सकते हैं। बैकग्राउंड वर्कर रीस्टार्ट के बाद भी रिट्राई जारी रखता है:
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: 100ms | X-Retry-Delay: 500ms | X-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 सेकंड तक सीमित हैं।