जेएमएस विषय बनाम कतार


191

मैं सोच रहा था कि जेएमएस क्यू और जेएमएस टॉपिक में क्या अंतर है।

ActiveMQ पृष्ठ कहता है

विषय

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

कतार

एक जेएमएस कतार औजार बैलेंसर शब्दार्थ को लोड करता है । एक एकल संदेश ठीक एक उपभोक्ता द्वारा प्राप्त किया जाएगा। यदि संदेश भेजे जाने के समय कोई उपभोक्ता उपलब्ध नहीं है, तो इसे तब तक रखा जाएगा जब तक कि कोई उपभोक्ता उपलब्ध न हो जो संदेश को संसाधित कर सकता है। यदि कोई उपभोक्ता संदेश प्राप्त करता है और बंद करने से पहले उसे स्वीकार नहीं करता है तो संदेश को किसी अन्य उपभोक्ता को पुनः वितरित किया जाएगा। एक कतार में कई उपभोक्ता हो सकते हैं जिनके पास उपलब्ध उपभोक्ताओं के बीच संतुलित संदेश होते हैं ।

मैं 'कुछ' करना चाहता हूं, जो प्रत्येक ग्राहक को उसी क्रम में संदेश की एक प्रति भेजेगा, जिसमें संदेश ActiveMQ दलाल द्वारा प्राप्त किया गया था।

कोई विचार?

जवाबों:


147

इसका मतलब है कि एक विषय उपयुक्त है। एक कतार का मतलब है कि एक संदेश एक और केवल एक संभावित ग्राहक को जाता है। प्रत्येक ग्राहक के लिए एक विषय जाता है।


4
किसी भी विचार कैसे लोड संतुलन JMS या WSO2 एमबी में क्यू के लिए काम करता है?
कुलसंगर

यह दिलचस्प है क्योंकि मैं कुछ सब्सक्राइबर को डिबग करने की कोशिश कर रहा था और एक विषय भेजते समय सब्सक्राइबर को नहीं बुलाया गया था, लेकिन जब कतार में भेजा तो काम किया
vmrvictor

54

प्रकाशक-सब्सक्राइबर मॉडल के लिए विषय हैं, जबकि बिंदु-दर-बिंदु के लिए कतारें हैं।


31

एक जेएमएस विषय वितरण के 1 से कई मॉडल में गंतव्य का प्रकार है। एक ही प्रकाशित संदेश सभी उपभोग्य ग्राहकों द्वारा प्राप्त किया जाता है । आप इसे 'प्रसारण' मॉडल भी कह सकते हैं। आप किसी विषय को वितरित कंप्यूटिंग के लिए ऑब्जर्वर डिजाइन पैटर्न में विषय के बराबर मान सकते हैं । कुछ जेएमएस प्रदाता कुशलतापूर्वक इसे टीसीपी के बजाय यूडीपी के रूप में लागू करना चुनते हैं। विषय के लिए संदेश वितरण 'फायर-एंड-भूल' है - यदि कोई नहीं सुनता है, तो संदेश बस गायब हो जाता है। यदि वह नहीं है जो आप चाहते हैं, तो आप 'टिकाऊ सदस्यता' का उपयोग कर सकते हैं।

एक JMS कतार संदेशों की एक 1 से 1 गंतव्य है। यह संदेश केवल एक उपभोग्य रिसीवरों द्वारा प्राप्त किया जाता है (कृपया ध्यान दें: 'विषय ग्राहक के लिए लगातार ग्राहकों का उपयोग करना और कतार ग्राहक के भ्रम के लिए रिसीवर ) भ्रम से बचता है। किसी कतार में भेजे गए संदेश डिस्क या मेमोरी पर संग्रहीत किए जाते हैं जब तक कि कोई इसे उठाता या समाप्त नहीं करता। इसलिए कतारों (और टिकाऊ सदस्यता) को कुछ सक्रिय भंडारण प्रबंधन की आवश्यकता है, आपको धीमे उपभोक्ताओं के बारे में सोचने की आवश्यकता है।

अधिकांश वातावरण में, मैं तर्क दूंगा, विषय बेहतर विकल्प हैं क्योंकि आप वास्तुकला को बदलने के बिना हमेशा अतिरिक्त घटक जोड़ सकते हैं। जोड़े गए घटकों की निगरानी, ​​लॉगिंग, एनालिटिक्स आदि हो सकते हैं। आप इस परियोजना की शुरुआत में कभी नहीं जानते कि 1 वर्ष, 5 वर्ष, 10 वर्ष में क्या आवश्यकताएं होंगी। परिवर्तन अपरिहार्य है, इसे गले लगाओ :-)


28

यह उतना ही सरल है:

कतार = सम्मिलित करें> वापस लें (एकल ग्राहक को भेजें) 1: 1

विषय = डालें> प्रसारण (सभी ग्राहकों को भेजें) 1: n

यहां छवि विवरण दर्ज करें


2
एक उदाहरण एक साधारण सामाजिक नेटवर्क के लिए हो सकता है। कोई 'पोस्ट' पसंद करता है। बैकएंड विषय पर एक 'पोस्ट पसंद' घटना प्रकाशित करता है। यह 3 ग्राहकों द्वारा उपभोग किया जाता है: notificationProcessor(पोस्टर को एक अधिसूचना भेजता है), karmaProcessor(कर्म को पसंद और पोस्टर देता है), feedProcessor(लोगों के फ़ीड में ऊपर की ओर चलता है)। सभी अतुल्यकालिक रूप से।
सिद्धार्थ

@ सिद्धार्थ, यह एक जवाब लपेटा जा सकता है-एक उदाहरण में, धन्यवाद!
selem

8

आदेश संरक्षण के लिए, यह ActiveMQ पृष्ठ देखें । संक्षेप में: एकल उपभोक्ताओं के लिए ऑर्डर संरक्षित है, लेकिन कई उपभोक्ताओं के लिए डिलीवरी के ऑर्डर की गारंटी नहीं है।


7

कतार

पेशेवरों

  • एक पारदर्शी संचार प्रवाह के साथ सरल संदेश पैटर्न
  • संदेशों को कतार में वापस रखकर उन्हें पुनर्प्राप्त किया जा सकता है

विपक्ष

  • केवल एक उपभोक्ता को संदेश मिल सकता है
  • निर्माता और उपभोक्ता के बीच एक युग्मन को लागू करता है क्योंकि यह एक-से-एक संबंध है

विषय

पेशेवरों

  • कई उपभोक्ताओं को एक संदेश मिल सकता है
  • निर्माता और उपभोक्ताओं (प्रकाशन-और-सदस्यता पैटर्न) के बीच घटाव

विपक्ष

  • अधिक जटिल संचार प्रवाह
  • एकल श्रोता के लिए एक संदेश पुनर्प्राप्त नहीं किया जा सकता है

4

यदि आपके पास एन उपभोक्ता हैं तो:

JMS विषय N के N को संदेश वितरित करते हैं JMS कतार N के 1 को संदेश देते हैं

आपने कहा था कि "आप एक 'चीज़' देख रहे हैं, जो प्रत्येक ग्राहक को उसी क्रम में संदेश की एक प्रति भेजेगा, जिसमें वह संदेश ActiveMQ दलाल द्वारा प्राप्त किया गया था।"

इसलिए आप एक टॉपिक का उपयोग करना चाहते हैं ताकि सभी एन ग्राहकों को संदेश की एक प्रति मिल सके।


1

TOPIC :: विषय कई संचारों में से एक है ... (मल्टीप्वाइंट या पब्लिश / सब्सक्राइब करें) EX: -imagine एक पब्लिशर फिल्म को youtub में पब्लिश करता है तो उसके सभी सब्सक्राइबर को नोटिफिकेशन मिल जाएगा .... QUEVE :: queve-to -एक संचार ... Ex: -जब रिचार्ज के लिए एक अनुरोध प्रकाशित करें तो यह केवल एक ही क्रेचियर के पास जाएगा ... हमेशा याद रखें कि यदि अनुरोध सभी qreceivers को मिला है, तो कई रिचार्ज हुए तो विश्लेषण विकसित करते समय जो एक आवेदन के लिए फिट है


-1

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

विषय यह है कि किसी विषय के सभी ग्राहक संदेश प्रकाशित होने पर समान संदेश प्राप्त करते हैं।


2
कतार संदेश केवल एक बार एकल उपभोक्ता द्वारा उपभोग किया जाएगा , इसीलिए एक कतार एक लोड बैलेंसर लागू करता है। विषय सदस्यता टिकाऊ हो सकती है : ग्राहक प्रकाशन के लंबे समय बाद संदेश प्राप्त कर सकता है (यदि ग्राहक बंद हो गया था और उदाहरण के लिए फिर से आता है)।
ग्रुबर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.