जेएमएस और एएमक्यूपी - रैबिटएमक्यू


133

मैं यह समझने की कोशिश कर रहा हूं कि जेएमएस क्या है और यह एएमक्यूपी शब्दावली से कैसे जुड़ा है। मुझे पता है कि JMS एक API है और AMQP एक प्रोटोकॉल है।

यहाँ मेरी धारणाएँ हैं (और प्रश्न भी)

  • RabbitMQ AMQP प्रोटोकॉल का उपयोग करता है (बल्कि AMQP प्रोटोकॉल लागू करता है)
  • जावा ग्राहकों को RabbitMQ को जोड़ने / उपयोग करने के लिए AMQP प्रोटोकॉल क्लाइंट लाइब्रेरीज़ का उपयोग करने की आवश्यकता है
  • जेएमएस एपीआई कहाँ से खेल में आता है? JMS API को RabbitMQ से कनेक्ट करने के लिए AMQP क्लाइंट लाइब्रेरीज़ का उपयोग करना चाहिए?
  • आमतौर पर हम JMS का उपयोग मैसेज ब्रोकरों जैसे कि RabbitMQ, ActiveMQ इत्यादि को जोड़ने के लिए करते हैं, फिर AMQP के बजाय यहां डिफ़ॉल्ट प्रोटोकॉल का क्या उपयोग किया जाता है?

उपरोक्त में से कुछ गूंगा हो सकता है। :-) लेकिन मेरे सिर को उसके चारों ओर लपेटने की कोशिश कर रहा है।


3
@ केविनरव: चयनित उत्तर कुछ मुख्य बिंदुओं पर गलत है जो इसे बनाता है। मैंने एक टिप्पणी जोड़ी है ताकि आप इसे देख सकें।
2020

@KevinRave मैंने उत्तर को संपादित कर दिया है। अब विवादास्पद हिस्से को बदल दिया गया है। अब पूरा उत्तर ठीक है
फ्रीक

मुझे नहीं .. जो मेरा उत्तर संपादित और इस अनुचित बिंदु जो संख्या 3 पर था दे दी है पता है क्योंकि मैं पहले से ही बात जो केविन बिंदु 2.Always पर कह रहा है कहा है से पहले नीचे मतदान या सुझाव बना ध्यान से पढ़ें
फ्रीक

1
इस लेख में जेएमएस अनुभाग पर एक नज़र डालें। इसकी बहुत विस्तृत व्याख्या है saipraveenblog.wordpress.com/2014/12/08/…
java_geek

जवाबों:


118

आपका प्रश्न थोड़ा गड़बड़ है और प्रश्न पत्र में एक कठिन प्रश्न जैसा दिखता है :) (जैसा कि शिक्षक हमेशा जटिल बनाने वाले सरल प्रश्न पूछने की कोशिश करते हैं: DI आशा है कि आप शिक्षक नहीं हैं :)) आइए इन सभी को एक-एक करके देखें।

जैसा कि आप जानते हैं:

जावा संदेश सेवा (JMS) एपीआई दो या अधिक क्लाइंट के बीच संदेश भेजने के लिए जावा संदेश ओरिएंटेड मिडलवेयर (MOM) एपीआई है । JMS जावा प्लेटफ़ॉर्म, एंटरप्राइज एडिशन का एक हिस्सा है, और जावा कम्युनिटी प्रोसेस के तहत जेएसआर 914 के रूप में विकसित विनिर्देश द्वारा परिभाषित किया गया है। यह एक मैसेजिंग मानक है जो जावा एंटरप्राइज एडिशन (जावा ईई) पर आधारित एप्लिकेशन घटकों को बनाने की अनुमति देता है, संदेश भेजें, प्राप्त करें और पढ़ें। यह वितरित अनुप्रयोग के विभिन्न घटकों के बीच संचार को शिथिल रूप से, विश्वसनीय, और अतुल्यकालिक होने की अनुमति देता है

अब ( विकिपीडिया से ):

उन्नत संदेश कतारबद्ध प्रोटोकॉल (AMQP) संदेश-उन्मुख मिडलवेयर के लिए एक खुला मानक अनुप्रयोग परत प्रोटोकॉल है। AMQP की परिभाषित विशेषताएं संदेश अभिविन्यास, कतारबद्ध, मार्ग (बिंदु-से-बिंदु और प्रकाशित-और-सदस्यता सहित), विश्वसनीयता और सुरक्षा हैं।

और सबसे महत्वपूर्ण बात (विकिपीडिया से फिर):

जेएमएस के विपरीत, जो केवल एक एपीआई को परिभाषित करता है, एएमक्यूपी एक वायर-स्तरीय प्रोटोकॉल है। एक तार-स्तर प्रोटोकॉल उस डेटा के प्रारूप का विवरण है जो ऑक्टेट्स की एक धारा के रूप में पूरे नेटवर्क में भेजा जाता है। नतीजतन, कोई भी उपकरण जो इस डेटा प्रारूप के अनुरूप संदेशों को बना और व्याख्या कर सकता है, कार्यान्वयन भाषा के बावजूद किसी अन्य आज्ञाकारी उपकरण के साथ हस्तक्षेप कर सकता है

कुछ महत्वपूर्ण बातें जो आपको पता होनी चाहिए:

  1. ध्यान रखें कि एएमक्यूपी एक संदेश प्रौद्योगिकी है जो जेएमएस एपीआई को लागू नहीं करता है।
  2. JMS API है और AMQP एक प्रोटोकॉल है। यह कहने का कोई मतलब नहीं है कि JMS का डिफ़ॉल्ट प्रोटोकॉल क्या है, बेशक क्लाइंट एप्लिकेशन किसी WebLogic Web Service को इनवॉइस करते समय HTTP / S को कनेक्शन प्रोटोकॉल के रूप में उपयोग करते हैं।
  3. JMS केवल एक API युक्ति है। यह किसी भी प्रोटोकॉल का उपयोग नहीं करता है। JMS API को साकार करने के लिए JMS प्रदाता (जैसे ActiveMQ) किसी अंतर्निहित प्रोटोकॉल का उपयोग कर सकता है। उदाहरण के लिए: Apache ActiveMQ निम्नलिखित में से किसी भी प्रोटोकॉल का उपयोग कर सकती है: AMQP, MQTT, OpenWire, REST (HTTP), RSS और एटम, Stomp, WSIF, WS सूचना, XMPP। मेरा सुझाव है कि आप जेएमएस ट्रांसपोर्ट का उपयोग कनेक्शन प्रोटोकॉल के रूप में पढ़ें ।

शुभ लाभ :)


20
I am not sure but I believe that AMQP also uses HTTP/S protocol but AMQP is enhacement is messaging protocol over HTTP: नहीं। यह सही नहीं है। JMS uses simple HTTP but for RabbitMQ/ActiveMq, they uses enhanced protocol.: नहीं। यह सही नहीं है। JMS केवल एक API युक्ति है। यह किसी भी प्रोटोकॉल का उपयोग नहीं करता है। JMS API को साकार करने के लिए JMS प्रदाता (जैसे ActiveMQ) किसी अंतर्निहित प्रोटोकॉल का उपयोग कर सकता है। उदाहरण के लिए: Apache ActiveMQ निम्नलिखित में से किसी भी प्रोटोकॉल का उपयोग कर सकती है: AMQP, MQTT, OpenWire, REST (HTTP), RSS और एटम, Stomp, WSIF, WS सूचना, XMPP।
2020

मैंने उत्तर को संपादित कर दिया है। अब विवादास्पद हिस्से को बदल दिया गया है।
फ्रीक

1
@brainOverflow मैं नहीं जानता, जो मेरा उत्तर संपादित और इस अनुचित बिंदु जो संख्या 3 पर था दे दी है .. क्योंकि मैं बात जो आप बिंदु 2.Always पर कह रहे हैं कहा है ध्यान से पढ़ें से पहले नीचे मतदान या सुझाव बना
फ्रीक

मैंने पहले ही उस PDF से सामान जोड़ लिया ताकि आप कुछ अन्य लिंक पर भी जा सकें
Freak

43

आधार से शुरू करते हैं।

RabbitMQ एक MOM (मैसेज ओरिएंटेड मिडलवेयर) है, जिसे Erlang (एक TLC- ओरिएंटेड प्रोग्रामिंग लैंग्वेज) के साथ विकसित किया गया है और वायर प्रोटोकॉल AMQP (एडवांस मैसेज क्यूइंग प्रोटोकॉल) को लागू कर रहा है। वर्तमान में, कई क्लाइंट APIs (उदाहरण के लिए, Java, C ++, RESTful, आदि) RabbitMe मैसेजिंग सेवाओं के उपयोग को सक्षम करने के लिए उपलब्ध हैं।

JMS (जावा मैसेजिंग सर्विस) एक JCP मानक है जो MOM द्वारा लागू किए जाने वाले संरचित APIs के एक सेट को परिभाषित करता है । MOM का एक उदाहरण जो लागू होता है (यानी संगत है) JMS APIs ActiveMQ है; वहाँ भी HornetMQ, और अन्य। ऐसे बिचौलियों को जेएमएस एपीआई मिलते हैं और उसी के अनुसार एक्सचेंज पैटर्न लागू करते हैं।

ऊपर के अनुसार, जेएमएस एपीआई का कंकाल, रैबिटमक्यू और इसके जावा क्लाइंट एपीआई का एक उदाहरण लिया गया है, यह संभव है कि एक जेएमएस कार्यान्वयन का उपयोग करके रैबिटमक्यू का उपयोग किया जाए: केवल एक चीज जो इस बिंदु पर है, वह है, इस पर अमल करना। जेएमएस विनिर्देशन के अनुसार एक्सचेंज पैटर्न (ओवर रैबिटमक्यू)।

कुंजी यह है: एपीआई का एक सेट, जेएमएस की तरह, तकनीक का कोई मामला नहीं लागू किया जा सकता है (इस मामले में, RabbitMQ)।


टीएलसी क्या है?
mvmn

@ एमवीएम टीएलसी दूरसंचार के लिए खड़ा है। कृपया, [१] पर एक नज़र डालें। [१] एलाक्रोनोम्स.com
पाओलो

15

JMS, जब इसे परिभाषित किया गया था, तो JMS क्लाइंट और मैसेजिंग सर्वर के बीच प्रोटोकॉल परिभाषित नहीं किया गया था। JMS क्लाइंट, जो JMS API को कार्यान्वित करता है, मैसेजिंग सर्वर के साथ संचार करने के लिए जो भी प्रोटोकॉल का उपयोग कर सकता है। ग्राहक को केवल JMS एपीआई के अनुरूप होना चाहिए। बस इतना ही। आमतौर पर जेएमएस क्लाइंट एक कस्टम प्रोटोकॉल का उपयोग करते हैं जो उनके मैसेजिंग सर्वर को समझ में आता है।

दूसरी ओर AMQP एक मैसेजिंग क्लाइंट और मैसेजिंग सर्वर के बीच एक प्रोटोकॉल है। एक JMS क्लाइंट संदेश सर्वर के साथ संचार करने के लिए प्रोटोकॉल के रूप में AMQP का उपयोग कर सकता है। और उस तरह के ग्राहक उपलब्ध हैं।

http://www.lshift.net/blog/2009/03/16/openamqs-jms-client-with-rabbitmq-server


2
  • जेएमएस एपीआई कहाँ से खेल में आता है? JMS API को RabbitMQ से कनेक्ट करने के लिए AMQP क्लाइंट लाइब्रेरीज़ का उपयोग करना चाहिए?

JMS एक API है, इसलिए कुछ JMS API को AMQP प्रोटोकॉल (जैसे Apache QPID JMS ) पर लागू किया जाता है जबकि अधिकांश JMS API अन्य प्रोटोकॉल का उपयोग करते हैं। यदि एएमक्यूपी प्रोटोकॉल का संस्करण समान है, तो इस तरह के क्लाइंट को अन्य एएमक्यूपी क्लाइंट के साथ संवाद करने में सक्षम होना चाहिए।

  • आमतौर पर हम JMS का उपयोग मैसेज ब्रोकरों जैसे कि RabbitMQ, ActiveMQ इत्यादि को जोड़ने के लिए करते हैं, फिर AMQP के बजाय यहां डिफ़ॉल्ट प्रोटोकॉल का क्या उपयोग किया जाता है?

यह उस JMS API के आपके कॉन्फ़िगरेशन पर निर्भर करता है। ActiveMQ के लिए, यह AMQP हो सकता है लेकिन डिफ़ॉल्ट रूप से यह 'ओपनवायर' है


1

मैं एक पेपर का सुझाव देना चाहता हूं, इससे मुझे यह समझने में बहुत मदद मिली कि एएमक्यूपी और जेएमएस में क्या अंतर है।

यहाँ पेपर का लिंक दिया गया है: http://www.wmrichards.com/amqp.pdf


0

https://spring.io/understanding/AMQP

AMQP (एडवांस्ड मैसेज क्यूइंग प्रोटोकॉल) अतुल्यकालिक मैसेजिंग के लिए एक खुले तौर पर प्रकाशित वायर विनिर्देश है। प्रेषित डेटा का प्रत्येक बाइट निर्दिष्ट है। यह विशेषता पुस्तकालयों को कई भाषाओं में लिखने, और कई ऑपरेटिंग सिस्टम और सीपीयू आर्किटेक्चर पर चलने की अनुमति देती है, जो वास्तव में इंटरऑपरेबल, क्रॉस-प्लेटफॉर्म मैसेजिंग मानक के लिए बनाता है।

एएमक्यूपी की तुलना अक्सर जेएमएस (जावा मैसेज सर्विस) से की जाती है, जो जावा समुदाय की सबसे आम मैसेजिंग प्रणाली है। जेएमएस की एक सीमा यह है कि एपीआई निर्दिष्ट हैं, लेकिन संदेश प्रारूप नहीं है। एएमक्यूपी के विपरीत, जेएमएस को संदेशों के गठन और संचारित करने की कोई आवश्यकता नहीं है। अनिवार्य रूप से, प्रत्येक जेएमएस दलाल संदेशों को एक अलग प्रारूप में लागू कर सकता है। उन्हें बस एक ही एपीआई का उपयोग करना होगा।


-1

मुझे संदेह है कि आप इस दस्तावेज को देख सकते हैं जो कहता है, भाग में:

JF क्लाइंट फॉर vFabric RabbitMQ vFabric RabbitMQ के लिए एक क्लाइंट लाइब्रेरी है। vFabric RabbitMQ एक JMS प्रदाता नहीं है, लेकिन JMS कतार और विषय संदेश मॉडल का समर्थन करने के लिए आवश्यक सुविधाएँ हैं। RabbitMQ के लिए JMS क्लाइंट, RabbitMQ Java क्लाइंट API के शीर्ष पर JMS 1.1 विनिर्देश को लागू करता है, इस प्रकार नए और मौजूदा JMS अनुप्रयोगों को RabbitMQ दलालों के साथ उन्नत संदेश कतारबद्ध प्रोटोकॉल (AMQP) के माध्यम से जोड़ने की अनुमति देता है।


नहीं। इसकी नहीं, जिसे मैं देख रहा था। लेकिन इसी तरह।
केविन रवे
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.