2013-07-01 9 views
6

मैं अमेज़ॅन एसईएस के साथ ई-मेल भेज रहा हूं, और सोच रहा हूं कि असफलता के मामले में रीट्रीज़ को सही तरीके से कैसे संभालना है।अमेज़ॅन एसईएस को डबल सबमिशन से कैसे बचें?

कहें कि POSTSendEmail कार्रवाई के लिए अनुरोध जारी करें, लेकिन एक टाइमआउट प्राप्त करें। यह जानने का कोई तरीका नहीं है कि संदेश भेजा गया है या नहीं।

क्या प्रत्येक ईमेल के साथ एक अद्वितीय पहचानकर्ता भेजना संभव है, इसलिए मैं सुरक्षित रूप से इस ईमेल को भेजने के लिए पुनः प्रयास कर सकता हूं, और एसईएस या तो मेल भेज सकता हूं, या मुझे बता सकता है कि यह पहले ही भेज दिया गया है?

वरना मैं चयन करने के लिए, एक नेटवर्क त्रुटि के मामले में, ईमेल भेजने के लिए दो बार खतरे में डालकर, और सब पर ईमेल भेज नहीं के बीच की है।

+0

आप एक एडब्ल्यूएस एसडीके का उपयोग कर रहे पल में ईमेल भेजने के लिए? मैं PHP एसडीके उपयोग कर रहा हूँ और बाद SendEmail शुरू हो रहा है, वहाँ एक प्रतिक्रिया ईमेल या नहीं भेजा जाता है, तो पता चलता है कि (जाँच है https://github.com/aws/aws-sdk-php/blob/master/src/ एडब्ल्यूएस/Ses/संसाधन/सत्र-2010-12-01.php)।तब मैं उस परिणाम को लॉग कर सकता था और अगली बात काफी सीधे –

+0

@Hieu हाँ मैं करता हूं, और हाँ अमेज़ॅन भेजने की स्थिति वापस कर देता है। मेरा मुद्दा यह है कि यदि मेल * नहीं भेजा गया है क्योंकि कहता है, HTTP अनुरोध को कोई प्रतिक्रिया प्राप्त नहीं होती है, या PHP किसी घातक त्रुटि से निकलती है, या किसी भी तरह की है, तो मुझे यह जानने का कोई तरीका नहीं है कि मुझे भेजने की आवश्यकता है या नहीं फिर से ईमेल करें या नहीं। मेरे पास लंबित ईमेल का क्रॉन बैच-प्रोसेसिंग है, और मैं पूछ सकता हूं कि 'आईडी 123 के साथ ईमेल पहले से ही भेजा गया है?' – Benjamin

+1

हम्म फिर एसडीके में आप GetSendStatistics() विधि का उपयोग कर सकते हैं जो उपयोग आंकड़े लाता है। यहां और पढ़ें: "अमेज़ॅन एसईएस एपीआई का उपयोग करके अपने उपयोग आंकड़ों की निगरानी करना" http://docs.aws.amazon.com/ses/latest/DeveloperGuide/monitor-usage-statistics.html। उम्मीद है कि यह मदद करता है;) –

उत्तर

6

SendRawEmail के लिए SES API Reference के अनुसार, केवल मापदंडों आपको अनुरोध के भाग के रूप में प्रदान करते हैं प्राप्तकर्ताओं की सूची, ईमेल शरीर, और अपने स्रोत का पता कर रहे हैं। दुर्भाग्य से, यह बहुत स्पष्ट है कि यदि आप एसईएस से एक प्रतिक्रिया के बजाय एक समय समाप्ति मिलता है, है कि वहाँ कोई रास्ता नहीं जानना चाहते हैं कि उस विशेष ईमेल भेजा गया। मुझे पता है कि यह बहुत परेशान है। जब मैं उस स्थिति में हूं, तो मुझे इससे नफरत है।

, हालांकि, इस दुविधा के सबसे व्यावहारिक समाधान को समझने के लिए कुछ विकल्प हैं। आप कभी भी पुनः प्रयास करने के लिए एक कंबल निर्णय नहीं ले सकते हैं और मान लें कि एक असंतुलित संदेश डुप्लिकेट संदेश से बेहतर है। आप एक कंबल निर्णय भी बना सकते हैं कि डुप्लिकेट ईमेल पूरी तरह से स्वीकार्य हैं। हालांकि, मेरी पसंदीदा और अनुशंसित दृष्टिकोण कम अकादमिक रूप से संतोषजनक, अभी तक व्यावहारिक, मध्य ग्राउंड है। मुझे समझाने दो।

एक नई सेवा के साथ एकीकृत करते समय और आपको एक बढ़िया मामला मिल जाता है, आपको नहीं पता कि कैसे संभालना है, लेकिन आपको उम्मीद नहीं है कि अक्सर ऐसा होगा, सबसे अच्छी बात यह है कि अधिक जानकारी एकत्र करें और चीजों को मैन्युअल रूप से प्रबंधित करें इसी बीच। रोम एक दिन में नहीं बनाया गया था, और आपकी क्लाउड सेवा पूरी तरह से काम करने वाला नहीं है जिस दिन आप इसे चालू करते हैं। इसके बजाए, जब आप टाइमआउट प्राप्त करते हैं, तो इसे लॉग करें और बाद में उस ईमेल को फिर से भेजने के लिए जो भी हो, उसे बचाएं।

अब, कल्पना करें कि आप सभी कोडिंग और एकीकरण परीक्षण कर काम हो गया है और आप उत्पादन में सेवा चालू कर दी है। पहला दिन, आप 100,000 ईमेल भेजने का प्रयास करते हैं। यदि आपको 1000 टाइमआउट मिलते हैं, तो वास्तव में कुछ अजीब चल रहा है और आपको पता है कि आपको अपने नेटवर्क की जांच करने की आवश्यकता है! क्या होगा, इसके बजाय, पहले दिन, आपको दूसरे दिन पर 0 टाइमआउट मिलेंगे, और फिर सातवें दिन, सप्ताह के 700,000 प्रयासों में से केवल 1 टाइमआउट था। यदि उपयुक्त हो, तो आप उस ग्राहक को कॉल करने का प्रयास कर सकते हैं और कह सकते हैं "हाय, आपको परेशान करने के लिए खेद है, लेकिन हम वास्तव में विश्वसनीयता के लिए प्रतिबद्ध हैं और हमें तकनीकी समस्या थी। मैं यह सुनिश्चित करना चाहता था कि आपको [XYZ] के लिए ईमेल रसीद मिल गई है। " अगर वे कहते हैं, ठीक है, तो वापस जाने और कोड बदलने के लिए समझदारी हो सकती है ताकि जब टाइमआउट हो, तो आप बस कुछ सेकंड प्रतीक्षा करने के बाद पुनः प्रयास करें क्योंकि आप जानते हैं कि यह शायद काम करने जा रहा है। बीच में कुछ भी के लिए एक ही विचार।

यहां मुद्दा यह है कि आप रहस्य करने के लिए अपने मानव बुद्धि को लागू करने दिया जाएगा। मैंने पाया है कि अज्ञात से बाहर निकलने की कोशिश करना अक्सर आसान होता है। जो कुछ भी होता है उसे संभालने में सक्षम होने के लिए बस स्वयं को सेट करें, और यह समझें कि स्मार्ट चीज क्या करना है जब आप जानते हैं कि समस्या वास्तव में कैसी दिखती है।

(आप का आनंद सकता है इस blog post - किसी और ने लिखा -। के बारे में "बढ़त मामलों से निपटने के नहीं")

+0

दिलचस्प जवाब, धन्यवाद। – Benjamin

संबंधित मुद्दे