2011-05-26 17 views
5

मैं यह सुनिश्चित करना चाहता हूं कि मैं कतार में कई बार कोई संदेश नहीं डालता। क्या कोई आईडी/नाम है जिसका उपयोग मैं विशिष्टता को लागू करने के लिए कर सकता हूं?Azure Queue अद्वितीय संदेश

उत्तर

8

Azure queues संदेश आदेश और संदेश विशिष्टता सुनिश्चित नहीं करता है। संदेशों को "कम से कम एक बार" संसाधित किया जाएगा, लेकिन कुछ भी सुनिश्चित नहीं करता है कि इसे दो बार संसाधित नहीं किया जाएगा, इसलिए यह "सबसे अधिक बार" सुनिश्चित नहीं होता है।

आपको एक ही संदेश को दो बार प्राप्त करने के लिए तैयार होना चाहिए। आप अपने डेटा के हिस्से के रूप में संदेश के शरीर में एक आईडी डाल सकते हैं।

11

vtortola बहुत अधिक कवर किया गया, लेकिन मैं थोड़ा और विस्तार जोड़ना चाहता था कि यह कम से कम एक बार डिलीवरी क्यों है।

जब आप कोई कतार आइटम पढ़ते हैं, तो इसे कतार से हटाया नहीं जाता है; इसके बजाय, यह अदृश्य हो जाता है लेकिन कतार में रहता है। वह अदृश्यता अवधि 30 सेकंड (अधिकतम: 2 घंटे) तक डिफ़ॉल्ट हो जाती है। उस समय, जिस कोड को कतार से वस्तु मिली थी, उसमें कतार संदेश में जो भी आदेश था, उसे संसाधित करने और कतार आइटम को हटाने के लिए इतना समय है।

टाइमआउट अवधि तक पहुंचने से पहले कतार आइटम को हटा दिया जाता है, सब ठीक है। हालांकि: टाइमआउट अवधि तक पहुंचने के बाद, कतार आइटम फिर से दिखाई देता है, और कतार आइटम धारण करने वाला कोड अब इसे हटा नहीं सकता है। इस मामले में, कोई और एक ही कतार संदेश पढ़ सकता है और उस संदेश को दोबारा संसाधित कर सकता है।

क्योंकि तथ्य यह है एक कतार संदेश का समय-समाप्त कर सकते हैं और कर सकते हैं के

फिर से दिखाई देते हैं:

  • आपकी कतार प्रसंस्करण idempotent होना चाहिए - जैसे प्रतिपादन के रूप में एक कतार संदेश पर कार्रवाई समान परिणाम देने चाहिए (एक तस्वीर के लिए एक थंबनेल)।
  • आपको टाइमआउट समायोजन के बारे में सोचना होगा। आप पाएंगे कि आदेश वैध हैं लेकिन प्रसंस्करण बहुत लंबा समय ले रहा है (हो सकता है कि आपका 45-सेकंड थंबनेल प्रतिपादन कोड 25 एमएम छवि अपलोड करने तक ठीक काम करता हो)
  • आपको जहर संदेशों के बारे में सोचना होगा - वे जो सही तरीके से संसाधित नहीं करेंगे। हो सकता है कि वे फेंकने के लिए अपवाद का कारण बनें या कुछ अमान्य स्थिति हो जो संदेश प्रोसेसर को प्रोसेसिंग को समाप्त करने का कारण बनती है, जो संदेश को अंततः कतार में फिर से दिखने का कारण बनती है। डेक्यूकाउंट पर एक संपत्ति कैल्ड हो गई है - उस कतार आइटम को पढ़ने पर उस संपत्ति को देखने पर विचार करें और, अगर बराबर, कहें, 3, संदेश को किसी तालिका या ब्लॉब में दबाएं और स्वयं को उस संदेश को ऑफ़लाइन करने में कुछ समय बिताने के लिए एक अधिसूचना भेजें।

गेट-कतार निम्न-स्तर आरईएसटी एपीआई पर अधिक जानकारी here है। यह आपको विंडोज एज़ूर कतार संदेश हैंडलिंग में अधिक अंतर्दृष्टि देगा।