2014-04-18 25 views
27

मैं RabbitMQ का उपयोग कर रहा हूं और मेरे पास एक कतार है जिसमें ईमेल संदेश हैं। मेरी उपभोक्ता सेवा संदेश भेजती है और उन्हें भेजने का प्रयास करती है। यदि, किसी भी कारण से, मेरा उपभोक्ता संदेश नहीं भेज सकता है, तो मैं फिर से भेजने के लिए संदेश को फिर से कतारबद्ध करना चाहता हूं। मुझे एहसास है कि मैं एक बुनियादी नाटक कर सकता हूं और अपेक्षित ध्वज को सत्य मान सकता हूं, हालांकि, मैं अनिश्चित काल तक संदेश की आवश्यकता नहीं लेना चाहता हूं (कहें, अगर हमारी ईमेल प्रणाली नीचे जाती है, तो मैं निरंतर संदेशों की आवश्यकता नहीं लेना चाहता)। मैं एक सीमित संख्या को परिभाषित करना चाहता हूं कि मैं संदेश को फिर से भेजने की आवश्यकता कर सकता हूं। मैं ईमेल संदेश ऑब्जेक्ट पर कोई फ़ील्ड सेट नहीं कर सकता, हालांकि, जब मैं इसे हटा देता हूं और एक नाटक भेजता हूं। कतार में संदेश पर अद्यतन फ़ील्ड मौजूद नहीं है। क्या कोई अन्य तरीका है जिसमें मैं इसका संपर्क कर सकता हूं? अग्रिम में धन्यवाद।मैं RabbitMQ में कई पुनः प्रयास प्रयास कैसे सेट करूं?

+0

यह ब्लॉग पोस्ट यह बताता है कि आप इसका उपयोग क्यों करना चाहते हैं इन प्रकार की समस्याओं को हल करने के लिए .net में RabbitMQ के शीर्ष पर NServiceBus या MassTransit जैसे ढांचे: https://www.make-awesome.com/2017/12/sure-you-can-just-use-rabbitmq/ –

उत्तर

39

ऐसी कोई सुविधा नहीं है जैसे RabbitMQ (साथ ही साथ AMQP प्रोटोकॉल में) प्रयास करें।

संभव समाधान को लागू करने के पुन: प्रयास करें प्रयास व्यवहार की सीमा:

  1. फिर से डिलीवर संदेश अगर यह पहले से redelivered नहीं किया गया था (जाँच redelivered पैरामीटर पर basic.deliver विधि - अपने पुस्तकालय इस के लिए कुछ इंटरफेस होना चाहिए) और इसे छोड़ और फिर dead letter exchange में पकड़ें, फिर किसी भी तरह से प्रक्रिया करें।

  2. प्रत्येक बार संदेश को फिर से प्रकाशित नहीं किया जा सकता है, लेकिन x-redelivered-count कहें (आप किसी भी नाम को चुन सकते हैं) कहें)। इस मामले में पुनर्विक्रेताओं पर नियंत्रण प्राप्त करने के लिए आपको उस फ़ील्ड को जांचना होगा, जिसे आपने सेट किया है चाहे वह कुछ सीमा तक पहुंच जाए (शीर्ष या नीचे - 0 मेरा choise, ए-ला ttl आईपी हेडर में टीसीपी/आईपी से) है।

  3. स्टोर संदेश अद्वितीय कुंजी (यूयूआईडी कहें, लेकिन आपको संदेश प्रकाशित करते समय इसे मैन्युअल रूप से सेट करना होगा) रेडिस, मेमकैच या अन्य स्टोरेज में, यहां तक ​​कि mysql में redeliveries गिनती के साथ-साथ प्रत्येक पुनर्विक्रेता वृद्धि/इस मूल्य को कम करने पर जब तक यह सीमा तक नहीं पहुंच जाता है।

  4. (वास्तविक गीक के लिए) प्लगइन लिखें जो आपके जैसे व्यवहार को लागू करेगा।

# 3 के समर्थक है कि कतार सिर में redelivered संदेश मनाने। यह महत्वपूर्ण है यदि आपके पास लंबी कतार है या संदेश संदेश आपके लिए महत्वपूर्ण है (ध्यान दें, कि पुनर्विक्रय सख्त संदेश आदेश तोड़ देंगे, विवरण के लिए आधिकारिक दस्तावेज़ देखेंगे या this question on SO)।

पी.एस .:

इस विषय में similar answer है, लेकिन php में। इसे देखो, शायद यह आपको थोड़ा सा मदद करता है (इसे शब्दों से पढ़ना शुरू करें "चक्र पुनर्विक्रेता समस्या से निपटने के लिए कई तकनीकें हैं"

+0

धन्यवाद मुझे लगता है कि मैं मृत पत्र विनिमय मार्ग पर जाऊंगा। – user2689570

+2

इसके अलावा, अगर आपको संदेश के समय को सीमित करने में कोई समय नहीं लगता है, तो रीट्रीज़ की संख्या सीमित करने के बजाय, आप हमेशा एक टीटीएल सेट कर सकते हैं। –

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