2012-06-21 13 views
6

से संदेशों को चुनिंदा रूप से पुनर्प्राप्त करना मैं खरगोश एमक्यू के लिए नया हूं और इस समस्या के लिए एक अच्छा दृष्टिकोण सोच रहा था, मैं उलझ रहा हूं। मैं एक ऐसी सेवा बनाना चाहता हूं जो कतार की सदस्यता लेती है और केवल उन संदेशों को खींचती है जो विशिष्ट मानदंडों को पूरा करते हैं; उदाहरण के लिए, यदि संदेश में एक विशिष्ट विषय शीर्षलेख है।खरगोश एमक्यू - कतार

मैं अभी भी खरगोश एमक्यू के बारे में सीख रहा हूं, और इस दृष्टिकोण के बारे में युक्तियों की तलाश में था। मेरे प्रश्नों में शामिल हैं: उपभोक्ता कतार से केवल विशिष्ट संदेश कैसे खींच सकता है? निर्माता संदेश में विषय शीर्षलेख कैसे सेट कर सकता है (यदि यह भी सही शब्द है?)

+0

तो वास्तव में अपने उपभोक्ता है करने के लिए ** सदस्यता ले ** (संदेशों सदस्यता _before_ प्रकाशित किया जा रहा में कोई दिलचस्पी नहीं), सदस्यता (और चयन नियम के साथ बंधन) मौजूदा _queue_ पर नहीं है लेकिन मौजूदा _exchange_ पर है (जैसा कि नीचे दिया गया है) .. फिर, प्रश्न का शब्द संपादित किया जाना चाहिए। – Myobis

उत्तर

14

RabbitMQ इस स्थिति के लिए बिल्कुल सही है। आप जो चाहते हैं उसे करने के लिए आपके पास कई विकल्प हैं। मैं बेहतर समझने के लिए प्रलेखन पढ़ने का सुझाव देता हूं। मैं सुझाव दूंगा कि आप एक विषय या प्रत्यक्ष विनिमय का उपयोग करें। विषय अधिक लचीला है। यह इस प्रकार चलता है।

निर्माता कोड RabbitMQ ब्रोकर से जुड़ता है और एक विशिष्ट नाम के साथ बनाता है और एक्सचेंज करता है।

निर्माता विनिमय करने के लिए प्रकाशित करता है। प्रकाशित प्रत्येक संदेश एक रूटिंग कुंजी के साथ प्रकाशित किया जाएगा।

उपभोक्ता RabbitMQ ब्रोकर से जुड़ता है।

उपभोक्ता कतार

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

आइए कहें कि आप लॉग संदेश प्रकाशित कर रहे थे। रूटिंग कुंजी "log.info", "log.warn", "log.error" जैसी कुछ हो सकती है। निर्माता द्वारा प्रकाशित प्रत्येक संदेश में प्रासंगिक रूटिंग कुंजी संलग्न होगी। उसके बाद आपके पास एक उपभोक्ता होगा जो सभी त्रुटि संदेशों के लिए भेजता है और ईमेल करता है और दूसरा जो सभी त्रुटि संदेशों को फ़ाइल में लिखता है। तो ईमेलर अपनी कतार से बाध्यकारी को रूटिंग कुंजी "log.error" के साथ एक्सचेंज में परिभाषित करेगा। इस प्रकार एक्सचेंज को सभी संदेशों को प्राप्त होता है, ईमेलर के लिए परिभाषित कतार में केवल त्रुटि संदेश होंगे। Filelogger एक ही एक्सचेंज के लिए एक नई अलग कतार को परिभाषित करेगा और एक अलग रूटिंग कुंजी सेट करेगा। आप तीन अलग-अलग रूटिंग कुंजियों के लिए तीन अलग-अलग बाइंडिंग कर सकते हैं या लॉग के साथ शुरू होने वाले एक्सचेंज से सभी संदेशों का अनुरोध करने के लिए वाइल्डकार्ड "लॉग। *" का उपयोग कर सकते हैं।

यह एक साधारण उदाहरण है जो दिखाता है कि आप जो हासिल करना चाहते हैं उसे प्राप्त कर सकते हैं। कोड उदाहरण के लिए

नज़र here विशेष रूप से ट्यूटोरियल संख्या संख्या 5

+0

क्या आपका मतलब उपभोक्ता एक कतार में विशिष्ट रूटिंग-कुंजी के साथ संदेश पुनर्प्राप्त कर सकता है? ऐसा लगता है कि उपभोक्ता के पास विकल्प नहीं है, यह सिर्फ कतार से सभी संदेश प्राप्त करता है। – ThemeZ

+2

@ThemeZ उपभोक्ताओं को कतार से सभी संदेश प्राप्त होते हैं। मुझे लगता है कि परिभाषा के अनुसार है। यहां बिंदु यह है कि वे विनिमय स्तर पर फ़िल्टर किए जाते हैं। एक विषय विनिमय के साथ कतार केवल कुछ संदेश प्राप्त होगा। इस तरह एक उपभोक्ता उन संदेशों को पढ़ेगा जो वे चाहते हैं क्योंकि कतार केवल उन संदेशों को प्राप्त करती है जो उपभोक्ता चाहता है। – robthewolf