2013-02-05 18 views
7

मैं बस समझना शुरू कर रहा हूं और ज़ीरोएमक्यू की कोशिश कर रहा हूं।ज़ीरोएमक्यू - एकाधिक प्रकाशक और श्रोता

यह मुझे स्पष्ट नहीं है कि मेरे पास दो से अधिक कलाकारों (प्रकाशक और ग्राहक) के बीच दो तरह का संचार कैसे हो सकता है ताकि प्रत्येक घटक एमक्यू पर पढ़ने और लिखने में सक्षम हो।

यह ईवेंट संचालित आर्किटेक्चर बनाने की अनुमति देगा, क्योंकि प्रत्येक घटक किसी ईवेंट के लिए सुन सकता है और किसी अन्य ईवेंट के साथ जवाब दे सकता है।

क्या ज़ीरोएमक्यू के साथ ऐसा करने का कोई तरीका है या मुझे इसके ऊपर अपना स्वयं का समाधान लागू करना चाहिए?

उत्तर

9

यदि आप सरल दो-तरफा संचार चाहते हैं तो आप बस प्रत्येक नोड पर एक प्रकाशन सॉकेट स्थापित करते हैं, और प्रत्येक को दूसरे से कनेक्ट करने दें।

कई सेटअप में से कई में यह जल्दी से संभालने में मुश्किल हो जाता है। असल में, ऐसा लगता है कि आप किसी प्रकार का केंद्रीय नोड चाहते हैं कि सभी नोड्स "कनेक्ट" कर सकें, संदेश प्राप्त कर सकें, और यदि ग्राहक की कुछ शर्तों को पूरा किया जाता है, तो संदेश भेजें।

ZeroMq के बाद से एक साधारण "बिजली सॉकेट", और नहीं एक संदेश कतार (इसलिए इसका नाम, ZeroMQ - शून्य संदेश कतार) है इस है नहीं संभव आउट-ऑफ-द-बॉक्स।

प्रत्येक नोड एक यूडीपी प्रसारण सॉकेट स्थापित करने के लिए एक साधारण विकल्प हो सकता है (ज़ीरोमैक का उपयोग नहीं, केवल नियमित सॉकेट)। सभी नोड्स जो भी हो, उसे सुन सकते हैं और सॉकेट पर अपने संदेशों को "प्रकाशित" कर सकते हैं, इसे प्रभावी ढंग से किसी भी नोड्स को सुनकर भेज सकते हैं। यह सेटअप एक लैन पर और एक सेटिंग में काम करता है जहां संदेशों को खोने के लिए ठीक है (आवधिक राज्य अपडेट की तरह)। अगर संदेशों को विश्वसनीय (और संभवतः टिकाऊ) होने की आवश्यकता है तो आपको एक अधिक उन्नत पूर्ण उड़ा संदेश कतार की आवश्यकता है।

यदि आप टिकाऊ संदेश कतारों के बिना कर सकते हैं, तो आप केंद्रीय नोड, केंद्रीय संदेश हैंडलर के आधार पर समाधान बना सकते हैं, जिसके लिए सभी नोड्स सब्सक्राइब कर सकते हैं और डेटा भेज सकते हैं। असल में, एक आरईपी (प्रतिक्रिया) सॉकेट (आने वाले डेटा के लिए) और एक PUB (प्रकाशक) सॉकेट (आउटगोइंग डेटा के लिए) के साथ "सर्वर" बनाएं। प्रत्येक ग्राहक फिर आरईक्यू (अनुरोध) सॉकेट पर सर्वर आरईपी सॉकेट में डेटा प्रकाशित करता है और सर्वर PUB सॉकेट में एक SUB (सब्सक्राइबर) सॉकेट सेट करता है।

विभिन्न message patterns उपलब्ध के बारे में ज़ीरोमक मार्गदर्शिका देखें।

इसे मसाला करने के लिए, आप आउटगोइंग संदेशों (सर्वर पब सॉकेट पर) को दो संदेश भागों में विभाजित करके (साइड "को सर्वर साइड फ़िल्टरिंग समेत" विषय "जोड़ सकते हैं (multi-part messages देखें) जहां पहला भाग निर्दिष्ट करता है "विषय" और दूसरे भाग में पेलोड शामिल है (उदाहरण के लिए temp | 46.2, गति | 134)। इस तरह, प्रत्येक ग्राहक किसी भी विषय (या सभी) में अपनी रुचि पंजीकृत कर सकता है और सर्वर को केवल मिलान संदेशों को फ़िल्टर करने देता है। विवरण के लिए this example देखें।

असल में, ज़ीरोमक नियमित सॉकेट पर "बस" एक अमूर्त है, जो आपके समाधान को बनाने के लिए कुछ संदेश पैटर्न प्रदान करता है। हालांकि, यह आपको बहुत कठिन काम से राहत देता है और सामान्य से स्केलेबिलिटी और प्रदर्शन प्रदान करता है। हालांकि कुछ लोगों को इसका उपयोग करना पड़ता है। अधिक जानकारी के लिए ZeroMq Guide देखें।

+0

कुछ संसाधनों को पढ़कर मुझे ऐसा लगता है कि इस तरह से करने का सबसे अच्छा तरीका प्रत्येक नोड पर एक प्रकाशन सॉकेट बन जाएगा, जैसा आपने कहा था। क्या इसका मतलब यह होगा कि मुझे इन सभी सॉकेट को स्पष्ट रूप से संदेश भेजने की आवश्यकता होगी?मैं क्लाउड के समान एमक्यू की तरह कुछ सोच रहा हूं, जहां हर घटक सिर्फ सुन रहा है और लिख सकता है, जिससे मुझे एक-दूसरे को संशोधित करने की आवश्यकता के बिना घटकों को जोड़ने की अनुमति मिलती है। पता नहीं है कि मैं क्या करूँगा पर स्पष्ट हूं। – user1978591

+0

हां, सभी ग्राहकों को सॉकेट को प्रकाशित करने वाले सभी अन्य नोड्स की सदस्यता लेने की आवश्यकता है, इसलिए मुझे नहीं लगता कि यह एक व्यवहार्य समाधान है। जैसा कि मैंने अपने जवाब में उल्लेख किया है, ज़ीरोमैक सॉकेट के आधार पर, जैसा कि आप उल्लेख करते हैं, अपनी खुद की एमक्यू सेवा, या मैसेजिंग सर्वर बनाना एक और तरीका है। इस तरह नोड्स को हर दूसरे नोड्स सॉकेट की सदस्यता नहीं लेनी पड़ेगी, बस इस सर्वर की प्रकाशन सॉकेट। ज़ीरोमैक का उपयोग करके इसे बनाना मुश्किल नहीं होना चाहिए। विकल्प अन्यथा तैयार है, जैसे कि RabbitMQ। –

+0

हाँ मुझे लगता है कि मैं इसे बनाने की कोशिश करूंगा। बहुत धन्यवाद, आप बहुत दयालु थे। – user1978591

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