2012-06-18 33 views
9

मैं अपाचे कैमल के चारों ओर अपने सिर को लपेटने की कोशिश कर रहा हूं, जो हल्के ईएसबी प्रतीत होता है। अगर मैं ऊंट/ईएसबी सही ढंग से समझता हूं, तो आप नोड्स और किनारों के ग्राफ के रूप में ऊंट मार्ग के बारे में सोच सकते हैं। प्रत्येक नोड मार्ग पर एक अंतराल है (संदेशों का उपभोग/उत्पादन कर सकते हैं)। प्रत्येक किनारा दो अलग-अलग अंतराल (1 निर्माता और 1 उपभोक्ता) के बीच एक मार्ग है।ईएसबी को पैक/तैनात कैसे किया जाना चाहिए?

मान लें कि यह सही है, मेरे पास एक व्यावहारिक प्रश्न है: आपके आवेदन के ईएसबी/ऊंट रूट को तैनात करने के बारे में सर्वोत्तम अभ्यास क्या करते हैं? क्या मुझे इसे अपने स्वयं के जार के रूप में पैकेज करना चाहिए, या क्या यह ईजेबी, वेब सर्विसेज और अन्य जेएआर से भरा हुआ अपना ईएआर होने योग्य है?

मुझे लगता है मैं पूछ रहा हूँ कि कैसे एक ऊंट का या ESB तैनात किया जाना चाहिए /, architected की तरह:

my-esb.ear/ 
    ejb1.jar/ 
     MyEJB_1.class 
    ejb2.jar/ 
     MyEJB_2.class 
    webservice.war/ 
     MyWebService.class 

या ...

my-esb.jar/ 
    MyEJB_1.class 
    MyEJB_2.class 
    MyWebService.class 

उत्तर

7

मेरी समझ से आप ऊंट को चलाने के कुछ तरीके हैं।

  1. एक जावा आवेदन में एंबेडेड: आप योग्य स्वतंत्र जावा आवेदन में कैमल एम्बेड कर सकते हैं। इस परिदृश्य में आप अपने आवेदन के अंदर एक ऊंट संदर्भ शुरू करेंगे जो मार्ग शुरू करेगा। यह बहुत अच्छा है जब आपके आवेदन को सेवाओं के साथ संवाद करने की आवश्यकता होती है। इसके लिए आपको काम करने के लिए ऊंट और तीसरे पक्ष के जारों को तैनात करने की आवश्यकता होगी कक्षापाथ

  2. वेब अनुप्रयोग में एम्बेड किया गया: जैसा कि लोगों ने पहले ही बताया है कि यह एक लोकप्रिय विकल्प प्रतीत होता है। ऊंट जार और तीसरे पक्ष के जार एक WAR फ़ाइल में लपेटे जाते हैं और अनिवार्य रूप से ऊंट सेवाओं को होस्ट करने के लिए टॉमकैट जैसे वेब कंटेनर पर तैनात किए जाते हैं।

  3. एक आवेदन सर्वर में एंबेडेड: मैं कैसे इस तरह के JBoss के रूप में एक आवेदन सर्वर से ऊंट को तैनात करने पर कुछ लेख पढ़ा है और मैं भी Glassfish करने की तैनाती लोगों के बारे में पढ़ा है। यह टोमकैट पर तैनात करने में बहुत समान लगता है। जेबॉस में कुछ वर्ग लोडिंग समस्याएं हैं जिन्हें आपको संबोधित करने की आवश्यकता होगी जो इसे मुश्किल बना देता है। तो हाँ आप WAR मार्ग पर जाकर एक एप्लिकेशन सर्वर पर तैनात कर सकते हैं।

  4. तैनात OSGi लिए: आप अपने ऊंट अपेक्षाकृत जल्दी एक OSGi बंडल जार और जैसे Apache फेलिक्स के रूप में एक OSGi ढांचे को तैनात कर सकते हैं। जार को उचित ओएसजीआई बंडल में परिवर्तित करना और फिर तैनाती करना अपेक्षाकृत सरल है। यहां एक बड़ी समस्या यह है कि कुछ तीसरे पक्ष के पास आपके लिए तैनाती के लिए ओएसजीआई संगत बंडल नहीं हो सकता है।

मेरी निजी वरीयता ओएसजीआई मार्ग है। यह आसान और हल्का है और मुझे अपने ऊंट मार्गों को लगातार सेवाओं (जैसे खिड़की सेवा, यूनिक्स डीमॉन) के रूप में बहुत छोटे पैर प्रिंट के साथ होस्ट करने की अनुमति देता है।

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

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

आशा करता है कि इससे थोड़ा सा मदद मिलती है।

0

कि अपनी आवश्यकताओं पर निर्भर करता है। कोई भी सच्चाई जवाब नहीं है जो बेहतर है।

ऊंट आपके मौजूदा बुनियादी ढांचे और रनटाइम प्लेटफ़ॉर्म पर अनुकूलित हो सकता है। तो कैमरे के साथ अपने अनुप्रयोगों को पैकेज करें जिस तरह से यह मंच इसे कर सकता है, और जिस तरह से आप इसे चाहते हैं।

उदाहरण एक वेब अनुप्रयोग (युद्ध) में कैमल का उपयोग करने के लिए आप इस लिंक को देख सकते हैं: http://camel.apache.org/tutorial-on-using-camel-in-a-web-application.html

+0

धन्यवाद @ क्लाउस! क्या आप (या कोई और) "एम्बेडेड कैमल" का मतलब बता सकते हैं और यह रनटाइम प्लेटफॉर्म पर कैसा लगा? – IAmYourFaja

+0

एक वेब अनुप्रयोग उदाहरण के लिए जोड़ा गया लिंक –

0

आप embedding .ear विचार कर रहे हैं, मैं देख रहा हूँ।

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

एक वसंत वेब-ऐप (.WAR) के अंदर ऊंट एम्बेड करना मैं जेटी या टॉमकैट में तैनाती के लिए अपना निजी पसंदीदा हूं। फिर आपको एक सभ्य सर्वलेट कंटेनर तक पहुंच मिलती है, एक रनटाइम जो कुछ चीजें कर सकता है, आदि

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

+0

मुझे मूल रूप से उलझन में लग रहा है! यदि कैमल जावा लाइब्रेरी (जेएआरएस का एक सूट) से ज्यादा कुछ नहीं है, तो मुझे जेबॉस या ओजीएस कहने से इसकी समस्या क्यों होगी? – IAmYourFaja

+0

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

+0

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

1

अन्य उत्तरों की तरह, यह आपकी आवश्यकताओं पर निर्भर करता है लेकिन एक ईएसबी आमतौर पर विभिन्न एकीकरण प्रक्रियाओं का संयोजन होता है जो आवश्यक जीवन चक्र को साझा नहीं करते हैं।

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

इसका मतलब यह नहीं है कि आपको ear समाधान के साथ जाना है। आप ear ओवरहेड के बिना war फ़ाइल में अपनी विभिन्न प्रक्रियाओं के लिए कोड को पूरी तरह से पैकेज कर सकते हैं।

4

मुझे उत्तर दो अपने एक से एक सवाल करते हैं:

एक वर्णनात्मक, सामान्य कारक है कि निर्धारित करने के लिए कैसे सबसे अच्छा (एक ESB तैनात करने के लिए या तो एक कान के रूप में इस्तेमाल किया जाना चाहिए की गैर अस्पष्ट सूची देता है प्रत्येक एंडपॉइंट एक एम्बेडेड जेएआर या एक "मोनोलिथिक" जेएआर के रूप में);

एम्बेड या मोनोलिथिक जार कोई फर्क नहीं पड़ता। कौन सा मामला बंडल या युद्ध परिनियोजन है। स्टैंडअलोन बंडल के मामले में आप निर्भरता संकल्प के लिए बहुत सारे जार वाले बहुत मोटा परिनियोजन संग्रह के साथ समाप्त हो सकते हैं।

पूरी तरह से बताता है कि क्यों ऊंट JBoss या ग्लासफिश

तरह सर्वर जावा ईई अनुप्रयोग के साथ अच्छी तरह से नहीं खेल सकता है
  1. थ्रेड/संसाधन/ऐप-सर्वर/कंटेनर पोर्ट ऑफ मैनेजमेंट प्रतिबंध लगाया जा सकता है। ClassLoading तंत्र पर आमतौर पर इस्तेमाल किया लाइब्रेरी संस्करण

  2. संघर्ष का

  3. संघर्ष

तार्किक रूप से, अपने कंटेनर OSGi का समर्थन करता है तो ऊंट किसी समस्या का सामना नहीं करना चाहिए।

  1. अपाचे ऊंट के रूप में एक बहुत ही हल्के संदेश रूटर है, तो आप निश्चित रूप से आप एक युद्ध फ़ाइल के रूप में अपने वेब आवेदन के साथ अपने कान में पैकेज कर सकते हैं कर सकते हैं। यदि आप मेवेन/आइवी का उपयोग कर रहे हैं और आपका वेब कंटेनर ओजीआई का समर्थन करता है, तो बिंगो! जीवन अधिक आसान होगा।
  2. दूसरा विकल्प के लिए एक बंडल
  3. के रूप में अपने आवेदन को तैनात करने की है और एक अन्य स्टैंड-अलोन जावा SE जार है।

[हालांकि, काफी पुरानी हो चुकी] नीचे दिए गए लिंक का पालन करें, उन आप कदम-दर-कदम दिशा पैकेजिंग पर, दे देंगे कम से कम पैकेजिंग तंत्र पर स्पष्टता:

Camel Step By Step

Camel in a Web Application

Camel Real Life Packaging & Deployment in OSGi environment