जेएमएस / संदेश कतारों का वास्तविक विश्व उपयोग? [बन्द है]


182

मैं सिर्फ JMS और Apache ActiveMQ के बारे में अभद्र पढ़ रहा था। और सोच रहा था कि यहां के लोगों ने किस वास्तविक उपयोग के लिए जेएमएस या इसी तरह की संदेश कतार प्रौद्योगिकियों का उपयोग किया है?

जवाबों:


191

JMS (ActiveMQ एक JMS ब्रोकर कार्यान्वयन है) अतुल्यकालिक अनुरोध प्रसंस्करण की अनुमति देने के लिए एक तंत्र के रूप में इस्तेमाल किया जा सकता है। आप ऐसा करने की इच्छा कर सकते हैं क्योंकि अनुरोध को पूरा होने में लंबा समय लगता है या क्योंकि कई दलों को वास्तविक अनुरोध में रुचि हो सकती है। इसका उपयोग करने का एक अन्य कारण जेएमएस के माध्यम से कई ग्राहकों (संभवतः विभिन्न भाषाओं में लिखे गए) को जानकारी तक पहुंचने की अनुमति देना है। ActiveMQ यहां एक अच्छा उदाहरण है क्योंकि आप C # / Java / Ruby क्लाइंट से एक्सेस की अनुमति देने के लिए STOMP प्रोटोकॉल का उपयोग कर सकते हैं।

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

  • ऑर्डर को थर्ड पार्टी बैक-एंड सिस्टम (जैसे SAP) में स्टोर करें
  • ग्राहक को एक ईमेल भेजें ताकि उन्हें सूचित किया जा सके कि उनका आदेश रखा गया है

ऐसा करने के लिए आपका एप्लिकेशन कोड एक JMS कतार पर एक संदेश प्रकाशित करेगा जिसमें एक ऑर्डर आईडी शामिल है। आपके एप्लिकेशन का एक भाग कतार में सुनकर आदेश का उपयोग करके घटना पर प्रतिक्रिया दे सकता है, डेटाबेस में आदेश देख रहा है और फिर उस आदेश को किसी अन्य तृतीय पक्ष प्रणाली के साथ रख सकता है। ऑर्डरआईड लेने और ग्राहक को एक पुष्टिकरण ईमेल भेजने के लिए आपके आवेदन का एक और हिस्सा जिम्मेदार हो सकता है।


Hi @jon क्या आपने यह डॉक्यूमेंटेशन टैग देखा है? stackoverflow.com/documentation/jms/commit उन्हें विषय को सक्षम करने के लिए बस एक कमिटेटर के समर्थन की आवश्यकता है, मुझे लगता है कि आप एक हो सकते हैं :) जो उन्हें JMS पर हमें भयानक डॉक्स देने में सक्षम बनाता है
juanmf

@ जोंस के रूप में मैं समझता हूं कि खुद उद्यम एकीकरण पैटर्न का कार्यान्वयन है?
वलीक

नहीं, खच्चर या ऊंट होगा ...
जॉन

1
यदि कतार में कोई भी एप्लिकेशन संदेशों का उपभोग कर रहा है, तो पुराने संदेशों को हटाने के लिए कतार को कभी भी कैसे पता चलेगा?
बेसिल बोर्क

95

लंबे समय से चल रहे संचालन को अतुल्यकालिक रूप से संसाधित करने के लिए हर समय उनका उपयोग करें। एक वेब उपयोगकर्ता प्रक्रिया के अनुरोध के लिए 5 सेकंड से अधिक समय तक इंतजार नहीं करना चाहेगा। यदि आपके पास ऐसा है जो उससे अधिक समय तक चलता है, तो एक डिज़ाइन अनुरोध को एक कतार में जमा करने के लिए है और तुरंत एक URL वापस भेजें जिसे उपयोगकर्ता यह देखने के लिए देख सकता है कि नौकरी कब खत्म हुई।

कई रिसीवर से प्रेषकों को डिकॉय करने के लिए पब्लिश / सब्सक्रिप्शन एक और अच्छी तकनीक है। यह एक लचीली वास्तुकला है, क्योंकि ग्राहक आवश्यकतानुसार आ-जा सकते हैं।


41
आपके उत्तर को पढ़ने के बाद मैं अपनी कतार में JMS जोड़ने जा रहा हूँ 'मैं इस वर्ष क्या सीखने जा रहा हूँ :) :)
रोमन

हमारे दिनों में, जेएमएस कल्पना का उपयोग करने के बजाय, हम अतुल्यकालिक विधि कॉल का उपयोग कर सकते हैं। अधिक जानकारी के लिए देखें: docs.oracle.com/javaee/6/tutorial/doc/gkkqg.html
geo

3
वे काफी समान नहीं हैं। एक asynch विधि कॉल के साथ कोई गारंटीकृत वितरण नहीं है; एक बार में कई श्रोताओं को भेजने वाले विषयों की कोई धारणा नहीं।
duffymo

75

मैंने JMS के लिए बहुत सारे अद्भुत उपयोग किए हैं:

  • ग्राहक सेवा के लिए वेब चैट संचार।

  • बैकएंड पर डिबग लॉगिंग। सभी ऐप सर्वर ने डिबग संदेशों को विभिन्न स्तरों पर प्रसारित किया। डिबग संदेशों को देखने के लिए एक JMS क्लाइंट को लॉन्च किया जा सकता है। यकीन है कि मैं कुछ syslog की तरह इस्तेमाल किया जा सकता है , लेकिन यह मुझे संदर्भ जानकारी (ऐप सर्वर नाम, एपीआई कॉल, लॉग स्तर, userid, संदेश प्रकार, आदि ...) के आधार पर प्रासंगिक जानकारी के आधार पर फ़िल्टर करने के लिए हर तरह से दिया। मैंने आउटपुट को भी रंगीन किया।

  • फ़ाइल करने के लिए लॉगिंग डीबग करें। ऊपर के समान, केवल विशिष्ट टुकड़ों को फ़िल्टर का उपयोग करके निकाला गया था, और सामान्य लॉगिंग के लिए फ़ाइल में लॉग किया गया था।

  • सूचना देने वाले। फिर, उपर्युक्त लॉगिंग के लिए एक समान सेटअप, विशिष्ट त्रुटियों के लिए देख रहा है, और विभिन्न माध्यमों (ईमेल, पाठ संदेश, आईएम, ग्रोएल पॉप-अप ...) के माध्यम से लोगों को सतर्क कर रहा है ...

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

  • और बिलिंग, ऑर्डर प्रोसेसिंग, प्रोविजनिंग, ईमेल जेनरेशन जैसी विलंबित गतिविधि के लिए सामान्य - कतारबद्ध लेनदेन ...

यह कहीं भी महान है कि आप संदेशों के वितरण की अतुल्यकालिक गारंटी देना चाहते हैं।


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

19

वितरित (ए) तुल्यकालिक कंप्यूटिंग।
एक वास्तविक दुनिया का उदाहरण एक एप्लीकेशन-वाइड नोटिफिकेशन फ्रेमवर्क हो सकता है, जो एप्लिकेशन उपयोग के दौरान विभिन्न बिंदुओं पर हितधारकों को मेल भेजता है। इसलिए आवेदन Producerएक Messageवस्तु के रूप में कार्य करेगा , इसे किसी विशेष पर डालकर Queue, और आगे बढ़ेगा।
वहाँ Consumerएस का एक सेट होगा जो Queueप्रश्न में सदस्यता लेगा , और Messageप्रेषित को संभालने में ध्यान रखेगा । ध्यान दें कि इस लेनदेन के दौरान, Producers को इस तर्क से अलग Messageकिया जाता है कि किसी दिए गए को कैसे संभाला जाएगा।
मैसेजिंग फ्रेमवर्क (एक्टिवएमक्यू और लाइक) एस Messageप्रदान करके इस तरह के लेनदेन को सुविधाजनक बनाने के लिए एक रीढ़ की हड्डी के रूप में कार्य करते हैं MessageBroker


मैं एसिंक्रोनस प्रोसेसिंग चाहता हूं क्योंकि रेस्ट सर्विस सेई सिंक्रोनस है। यह ActiveMq और Jms के साथ कैसे करें। कृपया इस पर मदद करें। stackoverflow.com/questions/19706788/… । आपकी मदद और समय के लिए धन्यवाद
कुमार

10

मैंने इसका उपयोग विभिन्न फंड प्रबंधन प्रणालियों के बीच इंट्राडे ट्रेडों को भेजने के लिए किया है। यदि आप एक महान प्रौद्योगिकी संदेश के बारे में अधिक जानना चाहते हैं, तो मैं पूरी तरह से " एंटरप्राइज इंटीग्रेशन पैटर्न " पुस्तक की सिफारिश कर सकता हूं " । अनुरोध / उत्तर और प्रकाशित / सदस्यता जैसी चीजों के लिए कुछ जेएमएस उदाहरण हैं।

मैसेजिंग एकीकरण के लिए एक उत्कृष्ट उपकरण है।


8

हम इसे अतुल्यकालिक प्रसंस्करण शुरू करने के लिए उपयोग करते हैं जिसे हम मौजूदा लेनदेन के साथ बाधित या संघर्ष नहीं करना चाहते हैं।

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


1
कृपया इस पर मदद करें। stackoverflow.com/questions/19706788/… । आपकी मदद और समय के लिए धन्यवाद।
कुमार

2
लेकिन अनुरोध के कारण अतुल्यकालिक है, क्योंकि नेटवर्क समस्या के कारण, आपका संदेश भेजा नहीं जा सकता है। इस बारे में क्या? जब आप सामान खरीदना चाहते हैं, तो आपका नाइटिफिकेशन भेजना होगा। क्या वह ऐसा नहीं?
grep

8

मैंने इसे अपने अकादमिक प्रोजेक्ट के लिए उपयोग किया है जो कि अमेज़ॅन के समान ऑनलाइन रिटेल वेबसाइट था। JMS का उपयोग निम्नलिखित विशेषताओं को संभालने के लिए किया गया था:

  1. ग्राहकों द्वारा रखे गए आदेशों की स्थिति को अपडेट करें, क्योंकि शिपमेंट एक स्थान से दूसरे स्थान तक जाता है। यह जेएमएस कतार को लगातार संदेश भेजने के द्वारा किया गया था।
  2. किसी भी असामान्य घटनाओं के बारे में चेतावनी देना जैसे शिपमेंट में देरी और फिर ग्राहक को ईमेल भेजना।
  3. यदि डिलीवरी अपने गंतव्य तक पहुँच जाती है, तो डिलीवरी ईवेंट भेजना।

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


6

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

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



5

हमने ऑनलाइन उद्धरण उत्पन्न करने के लिए संदेश का उपयोग किया है


4

हम अविश्वसनीय नेटवर्क पर दूरस्थ साइटों की एक बड़ी संख्या में सिस्टम के साथ संचार के लिए जेएमएस का उपयोग कर रहे हैं। विश्वसनीय संदेश के साथ संयोजन में ढीली युग्मन एक स्थिर प्रणाली परिदृश्य का उत्पादन करता है: प्रत्येक संदेश तकनीकी रूप से जल्द से जल्द भेजा जाएगा, नेटवर्क में बड़ी समस्याओं का पूरे सिस्टम परिदृश्य पर प्रभाव नहीं होगा ...

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