2016-02-16 4 views
6

मैं मौजूदा कतार के लिए उपभोक्ता लिखने की कोशिश कर रहा हूं।अपनी सभी संपत्तियों को प्रदान किए बिना कतार प्राप्त करना

RabbbitMQ एक अलग उदाहरण में चल रहा है और "ऑर्ग-कतार" नामक कतार पहले ही बनाई गई है और एक एक्सचेंज से जुड़ी हुई है। org-queue एक टिकाऊ कतार है और इसमें कुछ अतिरिक्त गुण भी हैं।

अब मुझे इस कतार से संदेश प्राप्त करने की आवश्यकता है। मैं कतार

conn = Bunny.new 
conn.start 
ch = conn.create_channel  
q = ch.queue("org-queue") 

यह मुझे अलग टिकाऊ संपत्ति बताते हुए एक त्रुटि फेंकता का उदाहरण प्राप्त करने के लिए नीचे दिए गए कोड का उपयोग करें। यह डिफ़ॉल्ट रूप से लगता है कि बनी टिकाऊ = झूठी का उपयोग करता है। इसलिए मैंने पैरामीटर के रूप में टिकाऊ सत्य जोड़ा है। अब यह अन्य मानकों के बीच अंतर बताता है। क्या मुझे उससे कनेक्ट करने के लिए सभी पैरामीटर निर्दिष्ट करने की ज़रूरत है? जैसा कि खरगोश एमक्यू विभिन्न पर्यावरण द्वारा बनाए रखा जाता है, मेरे लिए सभी गुणों को प्राप्त करना मुश्किल होता है।

क्या कतारों की सूची प्राप्त करने और सभी मानकों द्वारा कतार में जोड़ने के बजाय क्लाइंट में आवश्यक कतार सुनने का कोई तरीका है।

+0

आम तौर पर जब आप एक संदेश बस के साथ इंटरफेस आप अनुबंध आप को बनाए रखने की जरूरत है पता करने के लिए माना जाता कर रहे हैं। मैं इसे – Anthony

+0

की सिफारिश नहीं करता हूं। आपके पास पर्यावरण चर में कहीं भी कतार स्थापित करने के लिए उपयोग किए जाने वाले पैरामीटर होना चाहिए और उन का उपयोग करके कतार/विनिमय से कनेक्ट होना चाहिए। – LukeS

उत्तर

1

क्या आपने कोशिश की है: queue() पर निष्क्रिय = सही पैरामीटर? एक वास्तविक उदाहरण rabbitmq plugin of logstash है। : निष्क्रिय संदेश केवल संदेश प्राप्त करते समय इसे घोषित करने के बजाय कतार अस्तित्व की जांच करने के लिए। यह गतिशील कर के रूप में आप विभिन्न समस्याओं बना सकते हैं सुझाव दे रहे हैं और डिबग करने के लिए बहुत मुश्किल हो सकता है -

0

शायद इसे rabbitmqctl या व्यवस्थापक उपकरण (मैं नाम भूल गया) के साथ प्राप्त करने का तरीका है, इसलिए कतार के बारे में जानकारी। यहां तक ​​कि अगर भी, मैं परेशान नहीं होगा।

मेरे मन में आने वाले दो संभावित समाधान हैं।

पहले समाधान:

सामान्य तौर पर अगर आप पहले से मौजूद कतार घोषित करने के लिए चाहते हैं, यह सब सही मापदंडों के साथ हो गया है। तो मैं जो कर रहा हूं वह एक विशिष्ट कतार घोषित करने के लिए एक सहायक कार्य कर रहा है (मैं सी ++ क्लाइंट का उपयोग कर रहा हूं, इसलिए एपीआई अलग हो सकती है लेकिन मुझे यकीन है कि अवधारणा एक जैसी है)। उदाहरण के लिए, यदि मेरे पास 10 ग्राहक हैं जो कतार 1 का उपभोग कर रहे हैं, और उनमें से प्रत्येक को कतार को उसी तरह घोषित करने की आवश्यकता है, तो मैं केवल एक ऐसा उपयोग लिखूंगा जो इस कतार को घोषित करता है और यही वह है।


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


दूसरा समाधान: तथ्य यह है कि

यह पूरी तरह से एक ही बंधन कुंजी के साथ कई कतारों आबद्ध करने का कानूनी है पर निर्भर करता है (यहाँ https://www.rabbitmq.com/tutorials/tutorial-four-java.html पाया)

इसलिए जब तक वे बाध्यकारी कोर करते हैं, तब तक आपके प्रत्येक ग्राहक कतार को किसी भी तरह से डिलीवर कर सकते हैं ectly। बेशक ये अलग-अलग नामों के साथ अलग-अलग कतार होंगे। I की अनुशंसा नहीं करेगा। इसका तात्पर्य यह है कि प्रत्येक संदेश उदाहरण के लिए दो कतारों में जाता है और संभवतः एक संदेश (मुझे लगता है कि यहां उपयोग के मामले को एक ग्राहक द्वारा केवल एक बार संसाधित करने की आवश्यकता है)।

1

प्रलेखन पर यहाँ http://reference.rubybunny.info/Bunny/Queue.html और http://reference.rubybunny.info/Bunny/Channel.html

आधार ch.queues() विधि आपको उस चैनल पर सभी कतारों की एक हैश मिल सकता है का उपयोग करना। फिर एक बार जब आप उस कतार का उदाहरण पाते हैं जिसे आप कनेक्ट करना चाहते हैं तो q.options() विधि का उपयोग यह पता लगाने के लिए कि उस खरगोश कतार पर कौन से विकल्प हैं।

ऐसा करने के तरीके के बारे में एक दौर की तरह लगता है लेकिन काम कर सकता है। मैंने इसका परीक्षण नहीं किया है क्योंकि इस समय मेरे पास एक खरगोश सर्वर नहीं है।

+0

मेरे लिए ch.queues() एक खाली हैश देता है हालांकि मेरे खरगोश एमक्यू सर्वर में कतार मौजूद हैं – sag

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

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