सबसे पहले "पुराने" संदेश सिस्टम (MQ) कार्यान्वयन में पुराने हैं, लेकिन वे एक नए हैं इंजीनियरिंग विचार में: लेनदेन लगातार लगातार कतार। स्कैला अभिनेता और अक्का शायद एक नया कार्यान्वयन है लेकिन अभिनेताओं के पुराने समवर्ती मॉडल पर बनाया गया है।
हालांकि दो मॉडल अभ्यास में बहुत समान हैं क्योंकि वे दोनों ईवेंट संदेश आधारित हैं: RabbitMQ vs Akka पर मेरा उत्तर देखें।
यदि आप केवल JVM के लिए कोड पर जा रहे हैं तो अक्का शायद एक अच्छी पसंद है। अन्यथा मैं RabbitMQ का उपयोग करूंगा।
यदि आप स्कैला डेवलपर हैं, तो अक्का को कोई ब्रेनर नहीं होना चाहिए। हालांकि अक्का की जावा बाइंडिंग बहुत जावा-आश नहीं हैं और स्कैला के प्रकार प्रणाली के कारण कास्टिंग की आवश्यकता है।
जावा में भी लोग आम तौर पर अपरिवर्तनीय वस्तुएं नहीं बनाते हैं जो मैं आपको संदेश के लिए करने की सलाह देता हूं। नतीजतन जावा में यह बहुत आसान है कि अक्का का उपयोग करके कुछ ऐसा करें जो स्केल नहीं करेगा (संदेश के लिए म्यूटेबल ऑब्जेक्ट्स का उपयोग करके, अजीब बंद कॉलबैक स्थिति पर निर्भर करता है)। एमक्यू के साथ यह कोई समस्या नहीं है क्योंकि संदेश हमेशा गति की कीमत पर क्रमबद्ध होते हैं। अक्का के साथ वे आम तौर पर नहीं होते हैं।
अक्का भी अधिकांश एमक्यू की तुलना में बड़ी मात्रा में उपभोक्ताओं के साथ बेहतर पैमाने पर स्केल करता है। ऐसा इसलिए है क्योंकि अधिकांश एमक्यू (जेएमएस, एएमक्यूपी) ग्राहकों के लिए प्रत्येक कतार कनेक्शन के लिए एक थ्रेड की आवश्यकता होती है ... इस प्रकार बहुत सारे कतार == बहुत सारे स्थायी रूप से चल रहे थ्रेड होते हैं। हालांकि यह मुख्य रूप से एक ग्राहक मुद्दा है। मुझे लगता है कि ActiveMQ अपोलो में एक गैर-अवरोधक प्रेषक है जो एएमक्यूपी के लिए उस मुद्दे को स्पष्ट रूप से ठीक करता है। खरगोश एमक्यू क्लाइंट में ऐसे चैनल होते हैं जो आपको कई उपभोक्ताओं को गठबंधन करने की अनुमति देते हैं लेकिन अभी भी बड़ी संख्या में उपभोक्ताओं के साथ समस्याएं हैं जो संभावित रूप से डेडलॉक्स या कनेक्शन मरने का कारण बनती हैं, इसलिए आम तौर पर इस मुद्दे से बचने के लिए अधिक धागे जोड़े जाते हैं।
कहा जा रहा है कि Akka's remoting अपेक्षाकृत नया है और शायद अभी भी सभी विश्वसनीय संदेश गारंटी और क्यूओएस प्रदान नहीं करता है कि पारंपरिक संदेश कतार प्रदान करते हैं (लेकिन यह हर रोज बदल रहा है)। यह आम तौर पर पीयर-टू-पीयर भी है, लेकिन मुझे लगता है कि समर्थन सर्वर-टू-पीयर जो आम तौर पर अधिकांश एमक्यू सिस्टम (यानी असफलता का एक बिंदु) करता है लेकिन एमक्यू सिस्टम हैं जो पीयर-टू-पीयर हैं (RabbitMQ सर्वर- झांकना)।
अंत में खरगोश एमक्यू और अकका वास्तव में एक अच्छी जोड़ी बनाते हैं। आप अब्का को रैपिटएमक्यू के लिए एक रैपर के रूप में उपयोग कर सकते हैं, खासकर जब से RabbitMQ संदेशों की खपत को संभालने और स्थानीय रूप से संदेशों को रूट करने में मदद नहीं करता है (एक एकल जेवीएम में)।
जब अक्का चुनने के लिए
- उपभोक्ताओं के बहुत सारे (लाखों लगता है) है।
- कम विलंबता अभिनेता संगामिति मॉडल के लिए
उदाहरण प्रणाली की आवश्यकता है
ओपन: एक इंटरैक्टिव वास्तविक समय चैट प्रणाली जब MQ
- करने की आवश्यकता है चुनने के लिए कई अलग-अलग प्रणालियों (यानी गैर जेवीएम) के साथ एकीकृत करें
- संदेश विश्वसनीयता विलंबता से ज्यादा महत्वपूर्ण है
- अधिक उपकरण और व्यवस्थापक यूआई चाहेंगे
क्योंकि पिछले अंक लंबी चलने कार्यों के लिए बेहतर
- अभिनेता तुलना में एक अलग संगामिति मॉडल का उपयोग करना चाहेंगे की
उदाहरण प्रणाली: एक निर्धारित लेनदेन बैच प्रसंस्करण प्रणाली
संबंधित टिप्पणियों के आधार पर संपादित करें
मैंने एक धारणा की है कि ओपी वितरित प्रसंस्करण से संबंधित था जो Akka और संदेश पंक्तियां संभाल सकती हैं। मुझे लगता है कि वह distributed Akka के बारे में बात कर रहा था। स्थानीय समेकन के लिए अक्का का उपयोग अधिकांश संदेश कतार से नारंगी तुलना करने के लिए एक सेब है। मैं सबसे ज्यादा कहता हूं क्योंकि आप संदेश कतार मॉडल को स्थानीय रूप से एक समवर्ती मॉडल (यानी विषय, कतार, एक्सचेंज) के रूप में लागू कर सकते हैं, जो Reactor लाइब्रेरी और simple-react दोनों करते हैं।
कम विलंबता अनुप्रयोग/पुस्तकालय चुनना कम विलंबता अनुप्रयोगों के लिए बहुत महत्वपूर्ण है। एक संदेश कतार जैसे एक वितरित प्रसंस्करण समाधान आम तौर पर आदर्श नहीं है क्योंकि रूटिंग लगभग हमेशा तार पर किया जाता है जो स्पष्ट रूप से आवेदन के मुकाबले धीमा होता है और इस प्रकार अक्का बेहतर विकल्प होगा। हालांकि मुझे विश्वास है कि कुछ स्वामित्व वाली एमक्यू प्रौद्योगिकियां स्थानीय रूटिंग के लिए अनुमति देती हैं। जैसा कि मैंने पहले उल्लेख किया था कि अधिकांश एमक्यू क्लाइंट थ्रेडिंग के बारे में बहुत बेवकूफ हैं और गैर-अवरुद्ध आईओ पर भरोसा नहीं करते हैं और प्रति कनेक्शन/कतार/चैनल धागा है ... विडंबना यह है कि गैर-अवरुद्ध आईओ हमेशा कम विलंबता नहीं है लेकिन आमतौर पर अधिक संसाधन होता है कुशल।
जैसा कि आप वितरित प्रोग्रामिंग और समवर्ती प्रोग्रामिंग का विषय देख सकते हैं, बल्कि यह बड़ा है और हर रोज बदल रहा है, इसलिए मेरा मूल इरादा भ्रमित नहीं था बल्कि वितरित संदेश प्रसंस्करण के एक विशेष क्षेत्र पर ध्यान केंद्रित किया गया था, जो कि ओपी के साथ चिंतित था । संगामिति के संदर्भ में एक पर "प्रतिक्रियाशील" प्रोग्रामिंग (आरएफपी/धाराओं) अपनी खोजों ध्यान केंद्रित करने की है जो एक "नए" लेकिन इसी तरह अभिनेता मॉडल और संदेश कतार मॉडल जिनमें से इन मॉडलों के सभी आम तौर पर जोड़ा जा सकता है के लिए मॉडल है चाहते हो सकता है क्योंकि वे घटना आधारित हैं।
http://stackoverflow.com साथ अक्का का उपयोग करने का एक उदाहरण है/प्रश्न/4648280/स्कैला-अभिनेता-बनाम-जेएमएस/4648843 # 4648843 उपयोगी हो सकता है। – srnm