2010-01-19 5 views
10

अधिकांश परियोजनाओं में मैंने भाग लिया है, एक एसिंक्रोनस समाधान की पसंद बहुत चर्चा का स्रोत रहा है ...एसिंक्रोनस समाधान के लिए जेएमएस क्यों चुन रहे हैं? यह एक साधारण इकाई बीन से बेहतर क्यों है?

हर बार एक इकाई इकाई बीन कतार का प्रबंधन करने के लिए पर्याप्त थी: हम बस एक संदेश (टिकट) एक टेबल में और प्रसंस्करण क्रॉन कतार को अनस्टैक करता है। इस सरल समाधान के पास बहुत सरल होने का लाभ है, यह डेटाबेस के लेनदेन संबंधी संदर्भ पर आधारित है और हम इसके निष्पादन के दौरान प्राप्त संदेश की स्थिति का प्रबंधन कर सकते हैं।

इसलिए मैं निम्नलिखित प्रश्न पूछें:

1) क्या ब्याज हम JMS उपयोग करने के लिए है? जेएमएस के क्या फायदे हैं?

2) किस स्थिति में जेएमएस बनाम इकाई बीन prefering?

आपके प्रतिक्रिया और प्रतिक्रिया के लिए धन्यवाद!

+0

क्योंकि कभी-कभी लोग ईजेबी –

+0

का उपयोग नहीं करना चाहते हैं, इसलिए आपने मौजूदा संदेश प्रणाली का उपयोग करने के बजाय डेटाबेस आधारित संदेश कतार को एक साथ हथियाने का फैसला किया है। निश्चित रूप से यह काम करेगा, लेकिन मैं पूछूंगा कि आपने एक इकाई बीन से भी परेशान क्यों किया है, आपके पास बनाए रखने के लिए कोई राज्य नहीं है, या तालिका में बनाने के लिए अपडेट नहीं है, ताकि आप सीधे सर्वलेट (यदि वेब आधारित) से डीबी कॉल कर सकें या एक स्टेटलेस सत्र बीन। जिनमें से सभी वास्तविक संदेश प्रणाली के लिए अभी भी खराब विकल्प हैं। – Robin

उत्तर

13

1) जेएमएस का उपयोग करने के लिए हमें क्या रूचि है? जेएमएस के क्या फायदे हैं? 2) में कौन सी स्थिति इकाई बीन बनाम जेएमएस बना रही है?

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

JMS के अन्य लाभों में सेवा की गुणवत्ता और प्रबंधन, उदा हैं पुनर्वितरण प्रयास, मृत संदेश कतार, लोड प्रबंधन, स्केलेबिलिटी, क्लस्टरिंग, निगरानी, ​​आदि

जेएमएस भी प्रकाशित-सबरीब या पॉइंट-टू-पॉइंट का समर्थन करता है।

यह एक जेडीबीसी कथन की तुलना करने जैसा थोड़ा सा डेटाबेस बनाम एक पूर्ण ओआरएम बनाम एक पंक्ति डालने की तरह है। दोनों डीबी में एक पंक्ति डालने के लिए काम करते हैं, लेकिन ओआरएम बहुत अधिक प्रदान करेगा, साथ ही आप निम्न स्तर के मुद्दों से निपटने के लिए पहिया का पुन: आविष्कार नहीं करेंगे ... (समानता महान नहीं है लेकिन अच्छी तरह से)

मेरा सुझाव है कि आप FAQ देखें।

+0

आपके प्रतिवाद के लिए धन्यवाद। मैं एक इकाई बीन के साथ पहिया को फिर से शुरू करने और मल्टीथ्रेड वातावरण में लॉकिंग पैटर्न को प्रबंधित करने के बारे में आपके साथ सहमत हूं। ठीक है, चलिए एफएक्यू पढ़ते हैं! – ajeanson

+0

ध्यान दें कि मैं यह नहीं कह रहा हूं कि जेएमएस * समाधान * न तो है। जेएमएस का उपयोग जटिलता समाधान के कुछ पहलू (उदाहरण के लिए वितरित लेनदेन से निपटना, कतारों को कॉन्फ़िगर करना, मैसेजिंग त्रुटियों का प्रबंधन आदि) कर सकते हैं। यदि आपके पास * एक * उपभोक्ता प्रति कतार है और * गैर-कार्यात्मक * समस्याएं चिंता नहीं हैं, तो एक टेबल और धागा अच्छी तरह से काम कर सकता है। मैंने दोनों दृष्टिकोण देखा है और दोनों काम किया है। – ewernli

8

जावा ईई में asynchronicity से निपटने के लिए मूल रूप से 3 तंत्र हैं:

  1. JMS
  2. CDI घटना बस
  3. @Asynchronous एनोटेट राज्यविहीन सत्र सेम के

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

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

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

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

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

+0

सीडीआई इवेंट बस असीमित नहीं है। – Luke

+0

@ ल्यूक आप सही हैं। जैसा कि बताया गया मेरा जवाब सही नहीं है। मेरा कहना है कि सीडीआई इवेंट बस उन मामलों के लिए जेएमएस के लिए एक साधारण प्रतिस्थापन है जहां इसे घटना के लिए उपयोग किया जाता है (जो वास्तव में असीमित नहीं हैं) और 'एसिंक्रोनस' उन मामलों के लिए है जहां केवल कुछ असीमित व्यवहार की आवश्यकता होती है। चलो देखते हैं कि इसे कैसे अपडेट किया जाए;) –

संबंधित मुद्दे