Bird द्वारा SMS स्वीकार करने के बाद लेकिन आपके एप्लिकेशन को प्रतिक्रिया मिलने से पहले कनेक्शन टूट सकता है। नई key के साथ फिर से प्रयास करने पर दूसरा भेजा जा सकता है क्योंकि Bird इसे एक अलग अनुरोध मानता है।
key कैसे काम करती है?
आप हर इच्छित SMS भेजने के लिए एक Idempotency-Key हेडर सेट करते हैं और समान अनुरोध को फिर से प्रयास करते समय इसे दोबारा उपयोग करते हैं। जब Bird मूल प्रतिक्रिया संरक्षित करता है, तो मेल खाने वाला पुनः प्रयास भेजने को दोबारा निष्पादित किए बिना वही प्रतिक्रिया लौटाता है।
उदाहरण के लिए, एक ऑर्डर कन्फ़र्मेशन टाइमआउट और उसके फिर से प्रयास में एक ही key रखता है। किसी दूसरे ऑर्डर के कन्फ़र्मेशन को अलग key मिलती है।
रीप्ले की गई प्रतिक्रियाओं में Idempotency-Replay: true शामिल होता है, जिससे आपके लॉग में रीप्ले को नए प्रोसेस किए गए अनुरोध से अलग पहचाना जा सकता है।
SMS keys आपके वर्कस्पेस तक सीमित होती हैं। Bird अपने idempotency contract के तहत पूर्ण प्रतिक्रियाओं को तीन घंटे तक संरक्षित रखता है। उस विंडो के बाद, वही key एक नया अनुरोध निष्पादित कर सकती है क्योंकि उसका रीप्ले रिकॉर्ड समाप्त हो चुका है। इसलिए एक दिन बाद फिर से प्रयास करने के लिए दोबारा भेजने से पहले मूल परिणाम का मिलान ज़रूरी है।
विफलता प्रतिक्रियाएँ क्या बता रही हैं?
त्रुटि कोड बदले हुए अनुरोध, अधूरे अनुरोध और अनुपलब्ध सुरक्षा में अंतर करता है।
409withE01005 IdempotencyKeyReuse: एक ही key अलग अनुरोध के लिए उपयोग की गई। फिर से प्रयास करने से पहले key असाइनमेंट ठीक करें, क्योंकि यह key मूल अनुरोध से जुड़ी है। Bird method, endpoint, path और query parameters, और raw body की तुलना करता है। JSON whitespace में बदलाव भी अनुरोध को अलग बना देता है।409withE01004 RequestInProgress: उसी key वाला एक समानांतर अनुरोध अभी पूरा नहीं हुआ है। थोड़ा रुकें और उसी key और अनुरोध के साथ फिर से प्रयास करें ताकि मूल अनुरोध पूरा हो सके। इन-फ़्लाइट लॉक 30 सेकंड के भीतर समाप्त होता है। समाप्ति यह स्थापित नहीं करती कि मूल भेजना प्रभावी हुआ या नहीं।503withE01033 IdempotencyUnavailable: निष्पादन से पहले सुरक्षा अनुपलब्ध थी, इसलिए यह प्रयास निष्पादित नहीं हुआ। उसी key और अनुरोध के साथ backoff से फिर से प्रयास करें। यह प्रतिक्रिया किसी पिछले प्रयास का परिणाम स्थापित नहीं करती।- अन्य
5xxप्रतिक्रियाएँ या टाइमआउट: उसी key और अनुरोध के साथ backoff से फिर से प्रयास करें। Bird5xxप्रतिक्रियाओं को संरक्षित नहीं रखता। पुनः प्रयास संरक्षित सफल प्रतिक्रिया रीप्ले करता है या यदि कोई प्रतिक्रिया संरक्षित नहीं थी तो दोबारा निष्पादित हो सकता है।
idempotency हेडर इन पुनः प्रयासों में अनुरोध की पहचान बनाए रखता है।
क्या key डुप्लिकेट न होने की गारंटी देती है?
key डुप्लिकेट भेजने को कम करती है, लेकिन एक ही बार निष्पादन की गारंटी नहीं देती।
Bird द्वारा प्रतिक्रिया संरक्षित करने से पहले भेजना प्रभावी हो सकता है। यदि प्रतिक्रिया संरक्षण विफल होता है या इन-फ़्लाइट लॉक समाप्त होता है, तो पुनः प्रयास दोबारा भेजने को निष्पादित कर सकता है। तीन घंटे की संरक्षण विंडो भी रीप्ले सुरक्षा को सीमित करती है।
अपने एप्लिकेशन के इवेंट और भेजने के रिकॉर्ड रखें ताकि दोबारा भेजने से पहले अनिश्चित परिणाम का मिलान कर सकें। संदेश में ऑर्डर या संदर्भ नंबर शामिल करें ताकि प्राप्तकर्ता पहचान सके कि यह किस इवेंट से संबंधित है।
अगर हैंडसेट पर संदेश दो बार दिखे तो?
Idempotency key API के पुनः प्रयासों को नियंत्रित करती है; यह नियंत्रित नहीं करती कि प्राप्तकर्ता का फ़ोन संदेश कैसे दिखाता है। केवल स्क्रीनशॉट से यह स्थापित नहीं होता कि डुप्लिकेट कहाँ से आया।
अपने पूरे एप्लिकेशन भेजने के लॉग की तुलना Bird के संदेश रिकॉर्ड से करें। कई स्वीकृत message ID कई बार भेजना स्थापित कर सकती हैं। अधूरे लॉग में केवल एक ID मिलना यह साबित नहीं करता कि डुप्लिकेट डाउनस्ट्रीम में हुआ। जाँच के लिए सपोर्ट से संपर्क करते समय संबंधित ID, गंतव्य और टाइमस्टैम्प शामिल करें।
मुझे क्या करना चाहिए?
- हर इच्छित SMS भेजने के लिए एक key असाइन करें और उसके पुनः प्रयासों में समान अनुरोध दोबारा उपयोग करें।
- नेटवर्क त्रुटियों, टाइमआउट और
5xxप्रतिक्रियाओं को backoff के साथ फिर से प्रयास करें, उपलब्ध रीप्ले सुरक्षा बनाए रखने के लिए key संरक्षित रखें। - बदले-हुए-अनुरोध विरोधों को ठीक करें और जब मूल अनुरोध अभी भी चल रहा हो तब पुनः प्रयास में देरी करें।
- अनिश्चित भेजावटों का मिलान करें, जिनमें तीन घंटे की रीप्ले विंडो के बाद वाले भी शामिल हैं, यह तय करने से पहले कि दोबारा भेजना उचित है या नहीं।
संक्षेप में
एक key एक इच्छित भेजने की पहचान करती है।
फिर से प्रयास करते समय वही key और अनुरोध दोबारा उपयोग करें। संरक्षित प्रतिक्रिया तीन घंटे के भीतर रीप्ले होती है।
409बदले हुए या अधूरे अनुरोध की पहचान कर सकता है।IdempotencyKeyReuse का मतलब है कि अनुरोध बदल गया। RequestInProgress का मतलब है कि मूल अनुरोध अभी भी चल रहा है और देरी से फिर से प्रयास करना ज़रूरी है।
अनुपलब्ध सुरक्षा इस प्रयास को रोकती है।
503 IdempotencyUnavailable प्रतिक्रिया का मतलब है कि यह प्रयास निष्पादित नहीं हुआ। यह किसी पिछले प्रयास का परिणाम स्थापित नहीं करती।
प्रतिक्रिया रीप्ले डुप्लिकेट जोखिम को कम करता है, समाप्त नहीं करता।
प्रतिक्रिया संरक्षित होने से पहले भेजना प्रभावी हो सकता है। एक समाप्त रीप्ले रिकॉर्ड भी नए निष्पादन की अनुमति देता है।