2015-02-12 5 views
7

मैंने एसक्यूएस पर पुट ऑब्जेक्ट पर एक ईवेंट उत्सर्जित करने के लिए एक एस 3 बाल्टी सेट की है, और मैं एक ईबी कार्यकर्ता स्तर में एसक्यूएस कतार को संभालने में कामयाब रहा हूं।क्या एसक्यूएस वास्तव में प्रति संदेश एकाधिक एस 3 पुट ऑब्जेक्ट रिकॉर्ड भेजता है?

संदेश SQS भेजता है के लिए स्कीमा यहाँ है: http://docs.aws.amazon.com/AmazonS3/latest/dev/notification-content-structure.html

रिकॉर्ड्स, एक सरणी है जिसका अर्थ है कि वहाँ मेरे कार्यकर्ता समाप्ति बिंदु को एक पोस्ट में भेजे जाने वाले अनेक रिकॉर्ड हो सकता है। क्या यह वास्तव में होता है? या क्या मेरे कार्यकर्ता को प्रति संदेश केवल एक रिकॉर्ड प्राप्त होगा?

कर्मचारी केवल एक प्रतिक्रिया वापस कर सकता है, या तो 200 (संदेश सफलतापूर्वक संभाला गया है) या गैर-200 (संदेश सफलतापूर्वक संभाला नहीं गया है, जो इसे कतार में वापस रखता है), इस पर ध्यान दिए बिना कि संदेश में कितने रिकॉर्ड प्राप्त होते हैं।

तो यदि मेरे कार्यकर्ता को किसी संदेश में एकाधिक रिकॉर्ड प्राप्त होते हैं, और यह कुछ सफलतापूर्वक प्रबंधित करता है (डेटाबेस में डालने जैसे साइड इफेक्ट्स के साथ कुछ करने के द्वारा कहें) लेकिन एक या अधिक में विफल रहता है, तो मुझे इसे कैसे संभालना चाहिए? अगर मैं 200 लौटाता हूं, तो जो असफल हो जाते हैं उन्हें पुनः प्रयास नहीं किया जाएगा। लेकिन अगर मैं गैर-200 लौटाता हूं, तो सफलतापूर्वक संभाले गए लोगों को अनावश्यक रूप से पुनः प्रयास किया जाएगा, और संभवतः फिर से डाला जाएगा। इसलिए मुझे अपने कार्यकर्ता को केवल असफल लोगों को पुनः प्रयास करने के लिए पर्याप्त स्मार्ट बनाना होगा - जो कि तर्क है जिसे मैं लिखना पसंद नहीं करता।

यह बहुत आसान होगा अगर प्रति संदेश केवल एक रिकॉर्ड भेजा गया हो। तो यदि अभ्यास में यह मामला है, रिकॉर्ड के बावजूद रिकॉर्ड, मैं वास्तव में जानना चाहता हूं!

उत्तर

7

स्पष्ट होने के लिए, यह रिकॉर्ड नहीं है कि "एसक्यूएस भेजता है।" यह रिकॉर्ड है कि एस 3 एसक्यूएस (या एसएनएस, या लैम्बडा) भेजता है।

वर्तमान में, सभी S3 ईवेंट अधिसूचनाओं में प्रति अधिसूचना संदेश एक एकल ईवेंट है। हम कई रिकॉर्ड शामिल कर सकते हैं क्योंकि हम भविष्य में नए ईवेंट प्रकार जोड़ते हैं। यह एक संदेश प्रारूप भी है जो अन्य एडब्ल्यूएस सेवाओं में साझा किया जाता है, और अन्य सेवाओं में एकाधिक रिकॉर्ड शामिल हो सकते हैं।

https://forums.aws.amazon.com/thread.jspa?messageID=592264&#592264

तो, पल के लिए, यह संदेश में केवल एक रिकॉर्ड है प्रकट होता है।

लेकिन ... यदि आप मानते हैं कि आपके आवेदन को बार-बार या डुप्लिकेट संदेशों को संभालने के लिए तैयार नहीं होने की आवश्यकता है तो आप गलती कर रहे हैं। एसक्यूएस जैसी किसी भी बड़े पैमाने पर और वितरित प्रणाली में यह पूरी तरह से गारंटी देना बेहद मुश्किल है कि यह कभी नहीं हो सकता है, हालांकि असंभव:

प्रश्न: मुझे प्रत्येक संदेश कितनी बार प्राप्त होगा?

अमेज़ॅन एसक्यूएस को अपनी कतारों में सभी संदेशों की "कम से कम एक बार" डिलीवरी प्रदान करने के लिए इंजीनियर किया गया है। यद्यपि अधिकांश समय आपके संदेश को एक बार आपके आवेदन पर वितरित किया जाएगा, आपको अपने सिस्टम को डिज़ाइन करना चाहिए ताकि एक से अधिक संदेशों को संसाधित करने से कोई त्रुटि या असंगतता न हो।

http://aws.amazon.com/sqs/faqs/

संयोग से, मेरी मंच में, रिकॉर्ड सरणी में एक से अधिक प्रविष्टियां एक त्रुटि माना जाता है, जिससे संदेश को त्याग दिया और समीक्षा के लिए dead letter queue के लिए भेजा जाना।

+1

धन्यवाद, यह सहायक था। मुझे अब के लिए कई रिकॉर्ड्स केस को संभालने का आपका दृष्टिकोण पसंद नहीं है, और आपको "कम से कम एक बार" कॉल करने की सराहना करते हैं। – sandinmyjoints

+0

_ "एसक्यूएस जैसी किसी भी बड़े पैमाने पर और वितरित प्रणाली में पूरी तरह से गारंटी देना बेहद मुश्किल है कि यह कभी नहीं हो सकता" _ - बस स्पष्ट करने के लिए - यह केवल "बेहद मुश्किल" नहीं है, बल्कि सेवा की वितरित प्रकृति के कारण असंभव है। डुप्लिकेशन पर कुछ जानकारी के लिए [यह] (http://stackoverflow.com/a/38290017/836214) देखें। – Krease

+2

@ मेरी टिप्पणी वास्तव में सेवा के डिजाइन पर बाधाओं के संदर्भ में थी - - सेवा के उपभोक्ताओं नहीं। किसी भी डुप्लीकेट की गारंटी के लिए सिस्टम * जैसे * एसक्यूएस को डिजाइन करना बेहद मुश्किल है, लेकिन यह असंभव नहीं है ... हालांकि, ऐसी स्थिरता गारंटी का मतलब उपलब्धता और/या विभाजन सहिष्णुता के मामले में एक व्यापारिक होगा, और इसकी संभावना होगी सेवा घटकों के बीच संचार/समन्वय में वृद्धि के कारण प्रदर्शन जुर्माना। दूसरी तरफ, यह गारंटी देना असंभव है कि एक एसक्यूएस उपभोक्ता के लिए डुप्लिकेट डिलीवरी कभी नहीं होगी। –

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