जैसा कि अन्य उत्तरों का उल्लेख है, आप एसक्यूएस से आने वाले डुप्लिकेट संदेशों को रोक नहीं सकते हैं।
अधिकांश बार आपके संदेश एक बार आपके उपभोक्ताओं को सौंपे जाएंगे, लेकिन कुछ चरण में डुप्लीकेट में चलाएगा।
मुझे नहीं लगता कि इस सवाल का एक आसान जवाब है, क्योंकि इसमें उचित वास्तुकला के साथ आने की आवश्यकता है जो डुप्लीकेट से निपट सकता है, जिसका अर्थ है कि यह प्रकृति में बेवकूफ है।
यदि आपके वितरित आर्किटेक्चर के सभी कर्मचारी बेवकूफ़ थे, तो यह आसान होगा, क्योंकि आपको डुप्लिकेट के बारे में चिंता करने की आवश्यकता नहीं होगी। लेकिन हकीकत में, इस तरह का पर्यावरण मौजूद नहीं है, कहीं भी कुछ इसे संभालने में सक्षम नहीं होगा।
मैं वर्तमान में एक परियोजना पर काम कर रहा हूं जहां इसे हल करने के लिए मुझे इसकी आवश्यकता है, और इसे संभालने के लिए एक दृष्टिकोण के साथ आना है। मैंने सोचा कि यह दूसरों को मेरी सोच साझा करने के लिए लाभ पहुंचा सकता है। और यह मेरी सोच पर कुछ प्रतिक्रिया पाने के लिए एक अच्छी जगह हो सकती है।
तथ्य दुकान
यह एक बहुत बढ़िया सुझाव सेवाएं विकसित करने के इतना है कि वे तथ्यों जो सैद्धांतिक रूप से सभी प्रभावित नीचे की ओर प्रणालियों में एक ही राज्य पुन: पेश करने पुनः बजाया जा सकता है इकट्ठा है।
उदाहरण के लिए, मान लीजिए कि आप स्टॉक ट्रेडिंग प्लेटफ़ॉर्म के लिए संदेश ब्रोकर बना रहे हैं। (मैंने वास्तव में इस तरह की एक परियोजना पर वास्तव में काम किया है, यह भयानक था, लेकिन एक अच्छा सीखने का अनुभव भी था।)
अब चलो का कहना है कि में आते हैं व्यापार, और 3 प्रणालियों में रुचि देखते हैं करते हैं:
- एक पुरानी स्कूल मेनफ्रेम जो अद्यतन
- एक प्रणाली है कि सभी ट्रेडों और collates रहने की जरूरत है एक FTP सर्वर
- सेवा है कि व्यापार रिकॉर्ड करता है, और नए मालिक
यह थोड़ा जटिल है करने के लिए शेयरों से पुनर पर सहयोगियों के साथ साझा करें, मैं k अब, लेकिन विचार यह है कि एक संदेश (तथ्य) में आ रहा है, विभिन्न डाउनस्ट्रीम प्रभाव वितरित किया है।
अब आइए कल्पना करें कि हम एक तथ्य स्टोर बनाए रखते हैं, जो हमारे ब्रोकर में आने वाले सभी ट्रेडों की रिकॉर्डिंग है। और यह कि सभी 3 डाउनस्ट्रीम सेवा मालिक हमें यह बताने के लिए कहते हैं कि उन्होंने पिछले 3 दिनों से अपने सभी डेटा खो दिए हैं। एफ़टीपी डाउनलोड 3 दिन पीछे है, मेनफ्रेम 3 दिन पीछे है, और सभी ट्रेड 3 दिन पीछे हैं।
क्योंकि हमारे पास तथ्य स्टोर है, इसलिए हम सैद्धांतिक रूप से इन सभी संदेशों को एक निश्चित समय से निश्चित समय पर फिर से चला सकते हैं। हमारे उदाहरण में जो अब तक 3 दिन पहले होगा। और डाउनस्ट्रीम सेवाओं को पकड़ा जा सकता है।
यह उदाहरण शीर्ष पर थोड़ा सा प्रतीत हो सकता है, लेकिन मैं कुछ विशेष रूप से व्यक्त करने की कोशिश कर रहा हूं: तथ्यों को ट्रैक रखने के लिए महत्वपूर्ण चीजें हैं, क्योंकि यही वह जगह है जहां हम डुप्लिकेट से लड़ने के लिए हमारे वास्तुकला में उपयोग करने जा रहे हैं ।
कैसे तथ्य दुकान हमें डुप्लिकेट संदेशों
आप एक हठ स्तरीय कि आप CAP theorem, स्थिरता और उपलब्धता की सीए भागों देता है पर अपने तथ्य दुकान को लागू परंतु साथ में मदद करता है, तो आपको निम्न कर सकते हैं:
जैसे ही कोई कतार से संदेश प्राप्त होता है, आप अपने तथ्य स्टोर में जांच करते हैं कि क्या आपने पहले ही यह संदेश पहले ही देखा है, और यदि आपके पास है, चाहे वह इस समय लॉक हो और लंबित स्थिति में हो। मेरे मामले में, मैं अपने तथ्य स्टोर को लागू करने के लिए मोंगो डीबी का उपयोग करूँगा, क्योंकि मैं इसके साथ बहुत सहज हूं, लेकिन कई अन्य डीबी प्रौद्योगिकियों को इसे संभालने में सक्षम होना चाहिए।
यदि तथ्य अभी तक अस्तित्व में नहीं है, तो यह एक लंबित राज्य के साथ, एक लॉक समाप्ति समय के साथ तथ्य स्टोर में डाला जाता है। यह परमाणु संचालन का उपयोग करके किया जाना चाहिए, क्योंकि आप नहीं चाहते कि यह दो बार हो! यह वह जगह है जहां आप अपनी सेवा idempotence सुनिश्चित करते हैं।
मुबारक मामले - समय
तथ्य दुकान यह कह आपकी सेवा के लिए वापस आता है कि इस तथ्य मौजूद नहीं था, और कहा कि एक ताला बनाया गया था के अधिकांश, सेवा यह काम है करने के लिए प्रयास करता है तो क्या होगा । एक बार यह हो जाने के बाद, यह एसक्यूएस संदेश हटा देता है, और इस तथ्य को पूरा करता है।
डुप्लिकेट संदेश
ताकि क्या होता है जब संदेश के माध्यम से आता है और यह एक नकली नहीं है। लेकिन चलो देखते हैं कि एक डुप्लिकेट संदेश कब आता है। सेवा इसे उठाती है, और तथ्य स्टोर को लॉक के साथ रिकॉर्ड करने के लिए कहती है। तथ्य स्टोर यह बताता है कि यह पहले से मौजूद है, और यह बंद है। सेवा संदेश को अनदेखा करती है और उस पर छोड़ देती है!एक बार संदेश प्रसंस्करण करने के बाद, दूसरे कार्यकर्ता द्वारा, यह कतार से इस संदेश को हटा देगा, और हम इसे फिर से नहीं देख पाएंगे।
आपदा मामले - शायद ही कभी होता
तो जब एक सेवा की दुकान में पहली बार के लिए इस तथ्य को रिकॉर्ड करता है कि क्या होता है, तो एक निश्चित अवधि के लिए एक ताला मिलता है, लेकिन अधिक गिर जाता है? खैर एसक्यूएस आपको एक संदेश फिर से पेश करेगा, अगर इसे उठाया गया था, लेकिन कतार से सेवा के बाद एक निश्चित अवधि के भीतर हटाया नहीं गया था। Thats हम अपने तथ्य स्टोर क्यों कोड करते हैं कि एक सेवा सीमित समय के लिए एक ताला रखती है। क्योंकि यदि यह खत्म हो जाता है, तो हम चाहते हैं कि एसक्यूएस सेवा को संदेश पेश करे, या बाद में एक और उदाहरण, उस सेवा को यह मानने की अनुमति दे कि तथ्य को फिर से राज्य (निष्पादित) में शामिल किया जाना चाहिए।
संभावित डुप्लिकेट [एसक्यूएस कतार में कई उपभोक्ताओं का उपयोग] [http://stackoverflow.com/questions/37472129/using-many-consumers-in-sqs-queue) – Krease
एडब्ल्यूएस अब [फीफो कतार] प्रदान करता है (http: //docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/FIFO-queues.html), जो "बिल्कुल एक बार प्रसंस्करण प्रदान करता है लेकिन प्रति सेकेंड 300 लेनदेन तक सीमित है"। – bishop