2008-10-17 11 views
9

मैं जावा में हल्के मैसेजिंग फ्रेमवर्क की तलाश में हूं। मेरा काम एक SEDA के तरीके में घटनाओं को संसाधित करना है: मुझे पता है कि प्रसंस्करण के कुछ चरणों को जल्दी से पूरा किया जा सकता है, और अन्य नहीं, और प्रसंस्करण के इन चरणों को रद्द करना चाहते हैं।जावा में लाइटवेट मैसेजिंग (async invocations)

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

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

क्या आपके पास इस मुद्दे में सिफारिश करने के लिए कुछ भी है?

उत्तर

4

क्या आपको किसी भी तरह की दृढ़ता की आवश्यकता है (उदाहरण के लिए यदि आपका जेवीएम हजारों संदेशों को संसाधित करने में मर जाता है) और क्या आपको किसी अन्य JVMs के लिए संदेशों की आवश्यकता है?

यदि यह सब एक ही जेवीएम में है और यदि आप एक जेवीएम मर जाते हैं तो लेनदेन, वसूली या संदेश हानि के बारे में चिंता करने की आवश्यकता नहीं है - जैसे क्रिस ऊपर बताता है, निष्पादक ठीक हैं।

ActiveMQ बहुत हल्का है; यदि आप चाहें तो आप इसे केवल एक जेवीएम में उपयोग नहीं कर सकते हैं; इसके बाद आप लेनदेन/दृढ़ता/वसूली/रिमोटिंग (एकाधिक JVMs के साथ काम कर सकते हैं) को तब और जब आपको इसकी आवश्यकता हो। लेकिन अगर आपको इनमें से किसी भी चीज की आवश्यकता नहीं है तो इसके ओवरकिल - केवल एक्जिक्यूटर्स का उपयोग करें।

संयोग से जो हठ/विश्वसनीयता या लोड कई JVMs को संतुलन की आवश्यकता हो सकती कदम एक और विकल्प है, तो आप सुनिश्चित नहीं हैं hide the use of middleware completely होगा ताकि आप स्मृति SEDA JMS/ActiveMQ को निष्पादकों साथ कतारों में बीच स्विच कर सकते हैं और जब आप की जरूरत है ।

उदा। ऐसा हो सकता है कि कुछ चरणों को विश्वसनीय होने की आवश्यकता है & पुनर्प्राप्त करने योग्य (इसलिए किसी प्रकार की दृढ़ता की आवश्यकता है) और अन्य बार आप नहीं करते हैं।

4

वास्तव में हल्के वजन? Executors। :-) तो आप एक निष्पादक (बी, आपके विवरण में) सेट अप करते हैं, और ए केवल निष्पादक को कार्य सबमिट करता है।

2

मुझे लगता है कि अपाचे कैमल आपकी सभी ज़रूरतों को पूरा करता है। यह JVM के भीतर काम करता है और SEDA शैली (http://camel.apache.org/seda.html) और सिम रूटिंग का समर्थन करता है। जेएमएस प्रदाता या अन्य एडेप्टर के साथ, वसंत के साथ, या वसंत के साथ इसका इस्तेमाल किया जा सकता है।

1

पुराने धागे को पुनर्जीवित करने के लिए खेद है, लेकिन शायद यह किसी और को पढ़ने में मदद करता है ... मुझे लगता है कि FFMQ एक हल्के संदेश फ्रेमवर्क के लिए एक अच्छा उम्मीदवार है।

अद्यतन: हालांकि मुझे यकीन नहीं है कि यह पुनर्विक्रय देरी (मृत-पत्र-कतार समस्या) का समर्थन करता है या नहीं। मुझे हल्के प्रदाताओं के लिए भी प्रयोग करने योग्य लगता है। लेकिन मुझे लगता है कि संदेश चयनकर्ता क्वेरी और संदेश गुणों के संयोजन के साथ यह संभव हो सकता है।

0

किसी और को मदद करने के लिए इस धागे को पढ़ें:
सबसे हल्का संदेश ढांचा Mbasseder है। प्रकाशित सब्सक्राइब पैटर्न के बाद एमबीएएसएडर एक बहुत हल्का वजन संदेश (घटना) बस कार्यान्वयन है।यह उपयोग की आसानी के लिए डिज़ाइन किया गया है और संसाधन दक्षता और प्रदर्शन को संरक्षित करते समय समृद्ध और एक्स्टेंसिबल सुविधा प्रदान करना है।
एमबीएएसएडर के उच्च प्रदर्शन का मूल एक विशेष डेटा संरचना है जो लॉक विवाद को कम करता है जैसे कि समवर्ती पहुंच का प्रदर्शन गिरावट न्यूनतम है।
विशेषताएं: एनोटेशन, सिंक और/या एसिंक घटना वितरण के माध्यम से घोषणात्मक श्रोता परिभाषा, कमजोर संदर्भ, संदेश फ़िल्टरिंग