जवाबों:
JMS (ActiveMQ एक JMS ब्रोकर कार्यान्वयन है) अतुल्यकालिक अनुरोध प्रसंस्करण की अनुमति देने के लिए एक तंत्र के रूप में इस्तेमाल किया जा सकता है। आप ऐसा करने की इच्छा कर सकते हैं क्योंकि अनुरोध को पूरा होने में लंबा समय लगता है या क्योंकि कई दलों को वास्तविक अनुरोध में रुचि हो सकती है। इसका उपयोग करने का एक अन्य कारण जेएमएस के माध्यम से कई ग्राहकों (संभवतः विभिन्न भाषाओं में लिखे गए) को जानकारी तक पहुंचने की अनुमति देना है। ActiveMQ यहां एक अच्छा उदाहरण है क्योंकि आप C # / Java / Ruby क्लाइंट से एक्सेस की अनुमति देने के लिए STOMP प्रोटोकॉल का उपयोग कर सकते हैं।
एक वास्तविक दुनिया का उदाहरण एक वेब एप्लिकेशन है जिसका उपयोग किसी विशेष ग्राहक के लिए ऑर्डर करने के लिए किया जाता है। उस आदेश को रखने के एक भाग के रूप में (और इसे एक डेटाबेस में संग्रहीत करना) आप कई अतिरिक्त कार्यों को करने की इच्छा कर सकते हैं:
ऐसा करने के लिए आपका एप्लिकेशन कोड एक JMS कतार पर एक संदेश प्रकाशित करेगा जिसमें एक ऑर्डर आईडी शामिल है। आपके एप्लिकेशन का एक भाग कतार में सुनकर आदेश का उपयोग करके घटना पर प्रतिक्रिया दे सकता है, डेटाबेस में आदेश देख रहा है और फिर उस आदेश को किसी अन्य तृतीय पक्ष प्रणाली के साथ रख सकता है। ऑर्डरआईड लेने और ग्राहक को एक पुष्टिकरण ईमेल भेजने के लिए आपके आवेदन का एक और हिस्सा जिम्मेदार हो सकता है।
लंबे समय से चल रहे संचालन को अतुल्यकालिक रूप से संसाधित करने के लिए हर समय उनका उपयोग करें। एक वेब उपयोगकर्ता प्रक्रिया के अनुरोध के लिए 5 सेकंड से अधिक समय तक इंतजार नहीं करना चाहेगा। यदि आपके पास ऐसा है जो उससे अधिक समय तक चलता है, तो एक डिज़ाइन अनुरोध को एक कतार में जमा करने के लिए है और तुरंत एक URL वापस भेजें जिसे उपयोगकर्ता यह देखने के लिए देख सकता है कि नौकरी कब खत्म हुई।
कई रिसीवर से प्रेषकों को डिकॉय करने के लिए पब्लिश / सब्सक्रिप्शन एक और अच्छी तकनीक है। यह एक लचीली वास्तुकला है, क्योंकि ग्राहक आवश्यकतानुसार आ-जा सकते हैं।
मैंने JMS के लिए बहुत सारे अद्भुत उपयोग किए हैं:
ग्राहक सेवा के लिए वेब चैट संचार।
बैकएंड पर डिबग लॉगिंग। सभी ऐप सर्वर ने डिबग संदेशों को विभिन्न स्तरों पर प्रसारित किया। डिबग संदेशों को देखने के लिए एक JMS क्लाइंट को लॉन्च किया जा सकता है। यकीन है कि मैं कुछ syslog की तरह इस्तेमाल किया जा सकता है , लेकिन यह मुझे संदर्भ जानकारी (ऐप सर्वर नाम, एपीआई कॉल, लॉग स्तर, userid, संदेश प्रकार, आदि ...) के आधार पर प्रासंगिक जानकारी के आधार पर फ़िल्टर करने के लिए हर तरह से दिया। मैंने आउटपुट को भी रंगीन किया।
फ़ाइल करने के लिए लॉगिंग डीबग करें। ऊपर के समान, केवल विशिष्ट टुकड़ों को फ़िल्टर का उपयोग करके निकाला गया था, और सामान्य लॉगिंग के लिए फ़ाइल में लॉग किया गया था।
सूचना देने वाले। फिर, उपर्युक्त लॉगिंग के लिए एक समान सेटअप, विशिष्ट त्रुटियों के लिए देख रहा है, और विभिन्न माध्यमों (ईमेल, पाठ संदेश, आईएम, ग्रोएल पॉप-अप ...) के माध्यम से लोगों को सतर्क कर रहा है ...
सॉफ़्टवेयर क्लस्टर को गतिशील रूप से कॉन्फ़िगर और नियंत्रित करना। प्रत्येक ऐप सर्वर एक "मुझे कॉन्फ़िगर करें" संदेश प्रसारित करेगा, फिर एक कॉन्फ़िगरेशन डेमन जो सभी प्रकार की कॉन्फ़िगरेशन जानकारी वाले संदेश के साथ प्रतिक्रिया करेगा। बाद में, यदि सभी ऐप सर्वर को एक ही बार में उनके कॉन्फ़िगरेशन की आवश्यकता होती है, तो इसे कॉन्फ़िगरेशन डेमॉन से किया जा सकता है।
और बिलिंग, ऑर्डर प्रोसेसिंग, प्रोविजनिंग, ईमेल जेनरेशन जैसी विलंबित गतिविधि के लिए सामान्य - कतारबद्ध लेनदेन ...
यह कहीं भी महान है कि आप संदेशों के वितरण की अतुल्यकालिक गारंटी देना चाहते हैं।
वितरित (ए) तुल्यकालिक कंप्यूटिंग।
एक वास्तविक दुनिया का उदाहरण एक एप्लीकेशन-वाइड नोटिफिकेशन फ्रेमवर्क हो सकता है, जो एप्लिकेशन उपयोग के दौरान विभिन्न बिंदुओं पर हितधारकों को मेल भेजता है। इसलिए आवेदन Producer
एक Message
वस्तु के रूप में कार्य करेगा , इसे किसी विशेष पर डालकर Queue
, और आगे बढ़ेगा।
वहाँ Consumer
एस का एक सेट होगा जो Queue
प्रश्न में सदस्यता लेगा , और Message
प्रेषित को संभालने में ध्यान रखेगा । ध्यान दें कि इस लेनदेन के दौरान, Producer
s को इस तर्क से अलग Message
किया जाता है कि किसी दिए गए को कैसे संभाला जाएगा।
मैसेजिंग फ्रेमवर्क (एक्टिवएमक्यू और लाइक) एस Message
प्रदान करके इस तरह के लेनदेन को सुविधाजनक बनाने के लिए एक रीढ़ की हड्डी के रूप में कार्य करते हैं MessageBroker
।
मैंने इसका उपयोग विभिन्न फंड प्रबंधन प्रणालियों के बीच इंट्राडे ट्रेडों को भेजने के लिए किया है। यदि आप एक महान प्रौद्योगिकी संदेश के बारे में अधिक जानना चाहते हैं, तो मैं पूरी तरह से " एंटरप्राइज इंटीग्रेशन पैटर्न " पुस्तक की सिफारिश कर सकता हूं " । अनुरोध / उत्तर और प्रकाशित / सदस्यता जैसी चीजों के लिए कुछ जेएमएस उदाहरण हैं।
मैसेजिंग एकीकरण के लिए एक उत्कृष्ट उपकरण है।
हम इसे अतुल्यकालिक प्रसंस्करण शुरू करने के लिए उपयोग करते हैं जिसे हम मौजूदा लेनदेन के साथ बाधित या संघर्ष नहीं करना चाहते हैं।
उदाहरण के लिए, मान लें कि आपको "सामान खरीदना" जैसे महंगे और बहुत महत्वपूर्ण तर्क मिल गए हैं, सामान खरीदने का एक महत्वपूर्ण हिस्सा 'नोटिफिकेशन स्टोर' होगा। हम नोटिफ़ायर कॉल को अतुल्यकालिक बनाते हैं ताकि जो भी लॉजिक / प्रोसेसिंग नोटिफ़िकेशन कॉल में शामिल हो वह खरीदे गए व्यावसायिक तर्क वाले संसाधनों के साथ ब्लॉक या कंटेस्ट न हो। अंतिम परिणाम, पूर्णता खरीदें, उपयोगकर्ता खुश है, हम अपना पैसा प्राप्त करते हैं और क्योंकि कतार की गारंटी है कि डिलीवरी की सूचना मिलते ही स्टोर खुल जाता है या जैसे ही कतार में कोई नया आइटम आता है।
मैंने इसे अपने अकादमिक प्रोजेक्ट के लिए उपयोग किया है जो कि अमेज़ॅन के समान ऑनलाइन रिटेल वेबसाइट था। JMS का उपयोग निम्नलिखित विशेषताओं को संभालने के लिए किया गया था:
हमारे पास मुख्य सर्वर से जुड़े दूरस्थ ग्राहकों को भी लागू किया गया था। यदि कनेक्शन उपलब्ध है, तो वे मुख्य डेटाबेस तक पहुँचने के लिए उपयोग करते हैं या यदि स्वयं के डेटाबेस का उपयोग नहीं करते हैं। डेटा स्थिरता को संभालने के लिए, हमने 2PC तंत्र लागू किया था। इसके लिए, हमने इन प्रणालियों के बीच संदेशों के आदान-प्रदान के लिए जेएमएस का उपयोग किया, अर्थात एक समन्वयक के रूप में कार्य करना जो कतार पर संदेश भेजकर प्रक्रिया आरंभ करेगा और अन्य लोग कतार में एक संदेश फिर से भेजकर तदनुसार प्रतिक्रिया करेंगे। जैसा कि दूसरों ने पहले ही उल्लेख किया है, यह पब / उप मॉडल के समान था।
मैंने JMS को विभिन्न वाणिज्यिक और अकादमिक परियोजनाओं में इस्तेमाल होते देखा है। जेएमएस आसानी से आपकी तस्वीर में आ सकता है, जब भी आप एक पूरी तरह से वितरित सिस्टम के लिए चाहते हैं। आम तौर पर बोलते समय, जब आपको एक नोड से अपना अनुरोध भेजने की आवश्यकता होती है, और आपके नेटवर्क में कोई व्यक्ति रिसीवर के बारे में कोई जानकारी देने के बिना / उसके साथ इसका ख्याल रखता है।
मेरे मामले में, मैंने अपनी थीसिस में एक संदेश-उन्मुख मिडलवेयर (एमओएम) विकसित करने में जेएमएस का उपयोग किया है, जहां आपके अनुरोध के रूप में विशिष्ट प्रकार के ऑब्जेक्ट-ओरिएंटेड ऑब्जेक्ट एक तरफ उत्पन्न होते हैं, और आपकी प्रतिक्रिया के रूप में दूसरी तरफ संकलित और निष्पादित किया जाता है। ।
ActiveMQ के संयोजन में प्रयुक्त अपाचे कैमल एंटरप्राइज इंटीग्रेशन पैटर्न करने का एक शानदार तरीका है
हम अविश्वसनीय नेटवर्क पर दूरस्थ साइटों की एक बड़ी संख्या में सिस्टम के साथ संचार के लिए जेएमएस का उपयोग कर रहे हैं। विश्वसनीय संदेश के साथ संयोजन में ढीली युग्मन एक स्थिर प्रणाली परिदृश्य का उत्पादन करता है: प्रत्येक संदेश तकनीकी रूप से जल्द से जल्द भेजा जाएगा, नेटवर्क में बड़ी समस्याओं का पूरे सिस्टम परिदृश्य पर प्रभाव नहीं होगा ...