स्प्रिंग इंटीग्रेशन बनाम कैमल का उपयोग कब करें?


138

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

इसलिए मैं कुछ पृष्ठभूमि की जानकारी के लिए देख रहा था कि ऊँट स्प्रिंग इंटीग्रेशन से कैसे अलग है, लेकिन ऐसा लगता है कि जानकारी काफी खाली है, मुझे पता है:

प्रश्न यह है कि एक के बाद एक ढेर का उपयोग करने पर आपको क्या अनुभव हुआ? आप किन परिदृश्यों में कैमल को स्प्रिंग इंटीग्रेशन सपोर्ट की कमी बताते हैं? आप प्रत्येक के पेशेवरों और विपक्षों को कहां देखते हैं? वास्तविक दुनिया की परियोजनाओं से किसी भी सलाह की बहुत सराहना की जाती है।


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

जवाबों:


75

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

हमने एक छोटे पैमाने पर गोलीबारी की और मूल रूप से उस समय हमारी आवश्यकता के लिए कैमल ने जीत हासिल की। हम इसका उपयोग मुख्य रूप से आंतरिक डेटाफ़ाइल्स को बाहरी पार्टियों से / में स्थानांतरित करने के लिए करते हैं, जिन्हें आमतौर पर ftp / sftp / ... का उपयोग करके इसे भेजने और इसे ईमेल पर भेजने और इसे भेजने के लिए प्रारूप रूपांतरण की आवश्यकता होती है।

हमने संपादित-संकलन-डीबग चक्र को कम पाया। मार्गों को स्थापित करने के लिए ग्रूवी का उपयोग करके बोनस जोड़ा जाता है।

स्प्रिंग-इंटीग्रेशन एक बेहतरीन उत्पाद भी है, और मुझे पूरा यकीन है कि यह हमारी जरूरतों को भी पूरा करेगा।


1
धन्यवाद पीटर, अपनी बातों को साझा करने के लिए, क्या आपने कभी कैमल की जेएमएस क्षमताओं का उपयोग करने की कोशिश की है, ऐसा लगता है कि संबंधित घटक भी काफी लचीले हैं और वसंत एकता के समान समृद्धि है? "छोटे पैमाने पर गोलीबारी" द्वारा आप बेहतर प्रदर्शन संख्याओं का संदर्भ देते हैं?
ngeek

1
शूटआउट: यह मुख्य रूप से डेवलपर प्रदर्शन था। हमारे प्रदर्शन की जरूरतें बहुत अधिक नहीं हैं। हाँ हम आधार के रूप में बहुत सारे JMS का उपयोग करते हैं। ActiveMQ और JBossMQ दोनों का उपयोग मैसेजिंग के लिए किया जाता है।
पीटर टाइलेमेन

क्या आप एक नज़र stackoverflow.com/questions/46930494/… ले सकते हैं ?
gstackoverflow

67

मैं केवल स्प्रिंग इंटीग्रेशन की सलाह देता हूं यदि आपको पहले से ही एक स्प्रिंग प्रोजेक्ट मिल गया है और आपको फाइल, एफ़टीपी, जेएमएस, जेडीबीसी, और इसी तरह से कुछ "बेसिक" इंटीग्रेशन जोड़ना है।

Apache ऊंट के दो मुख्य फायदे हैं:

  1. कई, कई और तकनीकों का समर्थन किया जाता है।
  2. इसके अलावा, एक (अच्छा) XML डीएसएल, जावा, ग्रूवी और स्काला के लिए धाराप्रवाह एपीआई हैं।

क्योंकि अपाचे कैमल का स्प्रिंग के साथ बहुत अच्छा एकीकरण है, मैं ज्यादातर स्प्रिंग प्रोजेक्ट्स में स्प्रिंग इंटीग्रेशन के बजाय इसका उपयोग करूंगा।

यदि आपको अधिक विवरणों की आवश्यकता है, तो आप अपने अनुभवों को मेरे ब्लॉग पोस्ट में पढ़ सकते हैं: चंचल फॉर चॉइस: कौन सा एकीकरण फ्रेमवर्क उपयोग करने के लिए - स्प्रिंग एकीकरण, खच्चर ESB या Apache ऊंट?


31

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

  • एक्सएमएल-कॉन्फ़िगरेशन के लिए डीएसएल का उपयोग करने के लिए एक लंबी-घुमावदार कठिनाई का परिचय।
  • सभी ढांचे के घटकों को प्राप्त करने के लिए xml-कॉन्फ़िगरेशन कोड के पृष्ठ।
  • समर्पित ढांचे के साथ समता पर कार्यक्षमता प्रदान करने के लिए संसाधन गुम होना।

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

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

मेरा निष्कर्ष: मोची आपके व्यापार से जुड़ा है - स्प्रिंग को कंटेनर के रूप में और कैमल को सिस्टम इंटीग्रेशन फ्रेमवर्क के रूप में उपयोग करें।


3
अपने अनुभवों को साझा करने के लिए धन्यवाद, फ्रिट्ज़! मैं आपकी टिप्पणियों से पूरे दिल से सहमत हूँ: ऊंट अपनी बुनियादी अवधारणाओं के साथ-साथ हाथ में कई कार्यों के लिए व्यवहार्य घटकों का एक इको-सिस्टम प्रदान करने के बारे में बहुत साफ है (यदि आप विशिष्ट दिनचर्या को अनुकूलित करना चाहते हैं तो आसानी से हुक करने की अनुमति देता है)।
ngeek

15

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

एक छोटे पैमाने पर गोलीबारी करना एक बहुत अच्छा विचार है, बस यह सुनिश्चित करें कि आप उन चीजों के प्रकार को करने की कोशिश कर रहे हैं जो आप आमतौर पर परियोजना में कर रहे हैं।

- अस्वीकरण: मैं एक स्प्रिंग इंटीग्रेशन कमिटर हूं


9

कैमल और एसआई की सबसे अधिक तुलना जो मैंने देखी है वह निम्नलिखित को ध्यान में नहीं रखता है:

1.) स्प्रिंग इंटीग्रेशन के लिए डेवलपर उत्पादकता पर स्प्रिंग बूट का प्रभाव पड़ा है

2.) स्प्रिंग XD का प्रभाव स्प्रिंग इंटीग्रेशन अनुप्रयोगों को बिना किसी कोड संकलन के उपलब्ध कराने पर पड़ा है - स्प्रिंग XD स्रोत और सिंक बस स्प्रिंग एकीकरण चैनल एडेप्टर हैं, जब आप स्प्रिंग XD का विस्तार करना चाहते हैं।

3.) स्प्रिंग XD का प्रभाव एक स्टैक में स्प्रिंग इंटीग्रेशन, स्प्रिंग बैच, स्प्रिंग डेटा (+ Hadoop!) को एकीकृत करने पर पड़ा है, जिससे प्रभावी रूप से बैच और स्ट्रीम प्रोसेसिंग, HDFS / Apache Hadoop सपोर्ट, और स्प्रिंग इंटीग्रेशन के लिए बहुत कुछ हुआ है।

4.) जल्द ही रिलीज़ होने वाले स्प्रिंग इंटीग्रेशन 4.0 जावा डीएसएल https://github.com/spring-projects/spring-integration-extensions/wiki/Spring-Integration-Java-DSL-Reference का प्रभाव

आपके विचार के लिए,

/ पीटर (अस्वीकरण मैं Pivotal में काम करता हूं)


3
जावा डीएसएल को बहुत अधिक काम की आवश्यकता है और इससे भी अधिक प्रलेखन को ध्यान में रखना चाहिए।
cuttcards

यह अब थोड़ी देर के लिए जारी किया गया है ... बसंत ।io
blog/

6

हम अपने आवेदन के लिए स्प्रिंग इंटीग्रेशन का उपयोग कर रहे हैं और अब Apache ऊंट को स्थानांतरित करने पर विचार कर रहे हैं क्योंकि हमने स्प्रिंग इंटीग्रेशन ढांचे के साथ बहुत सारे मुद्दों का सामना किया। यहाँ कुछ मुद्दे हैं।

  1. CachingConnectionFactory जो स्प्रिंग प्रदान करता है, आईबीएम एमक्यू में 1000 के निष्क्रिय कनेक्शन खोलता है और इस बात की कोई गारंटी नहीं है कि ये कनेक्शन पुन: उपयोग किए जाते हैं। और फिर भी ये कनेक्शन हमेशा के लिए खुले रहेंगे जो एमक्यू की तरफ परेशानी पैदा करते हैं। कम से कम वातावरण में हर हफ्ते आवेदन को फिर से शुरू करने के लिए सिर्फ कनेक्शनों को ताज़ा करना था। अपाचे कैमल कैशिंग भी प्रदान करता है और कनेक्शन लोड के आधार पर ऊपर / नीचे जाने लगता है।

  2. वसंत QoS मापदंडों के लिए मैपर प्रदान नहीं करता है। यहां तक ​​कि अगर आप क्यूओएस को सक्षम करते हैं, तो वितरण मोड और समाप्ति / समय-सारिणी गुण खो जाएंगे (मैं इसके लिए एक JIRA मुद्दा उठाने जा रहा हूं)। अपाचे कैमल इसे संभालती है और क्यूओएस मापदंडों को अपस्ट्रीम एप्लिकेशन पर भेजा जाता है और इसे ड्रॉप नहीं किया जाता है।

मैं अभी अपाचे कैमल के साथ अपवादों और लेनदेन को संभालने के मुद्दों पर काम कर रहा हूं, जो कि स्प्रिंग को एओपी के साथ बेहतर तरीके से संभालना लग रहा था।


क्या कोई ग़लतफ़हमी थी जो आईबीएम एमक्यू में निष्क्रिय कनेक्शन को जन्म देती है।
हरप्रीत संधू - TheRootCoder

4

वास्तव में, मैं कहूंगा कि एफ़टीपी ने अपनी ऊष्मायन अवधि को स्नातक किया है। आप एसआई मंचों / JIRA पर एक सरल खोज कर सकते हैं यह देखने के लिए कि क्या नई सुविधाएँ लागू की गई थीं और बग्स तय किए गए थे। विभिन्न बकबक से ऐसा लगता है कि इसमें पहले से ही कुछ उत्पादन उपयोग है, इसलिए मैं इसे दूसरा रूप देने का सुझाव दूंगा और निश्चित रूप से आपके माध्यम से अपनी चिंताओं को बताऊंगा।

http://forum.springsource.org/forumdisplay.php?42-Integration
https://jira.springsource.org/browse/INT

चीयर्स ओलेग

अस्वीकरण: मैं स्प्रिंग इंटीग्रेशन कमिटर हूं


4

Apache Camel एक बहुत ही अच्छा ढांचा है और बहुत ही संपूर्ण भी है। लेकिन अगर आपका एप्लिकेशन स्प्रिंग का उपयोग करता है, तो मेरी व्यक्तिगत सलाह है कि स्प्रिंग इंटीग्रेशन का उपयोग करें।

स्प्रिंग इंटीग्रेशन, स्प्रिंग-सोर्स इकोसिस्टम का एकीकरण ईआईपी शिकायत ढांचा है। पारिस्थितिकी तंत्र के साथ इसका उत्कृष्ट एकीकरण है: स्प्रिंग बूट, बैच, एक्सडी; यहां तक ​​कि कोर स्प्रिंग फ्रेमवर्क से शुरू होने वाले एक ही एब्स्ट्रैक्शन का उपयोग करता है। कुछ मैसेजिंग एब्सट्रैक्शन को फ्रेमवर्क में स्थानांतरित किया गया था, इस बात के प्रमाण के रूप में कि स्प्रिंग इंटीग्रेशन का मूल मैसेजिंग एब्सट्रैक्शन बहुत मजबूत है। उदाहरण के लिए अब स्प्रिंग फ्रेमवर्क स्प्रिंग वेब, वेब सॉकेट समर्थन के लिए मैसेजिंग एब्स्ट्रक्शन का उपयोग करता है।

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


1

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

ऊंट समवर्ती कोड के साथ काम करने के कुछ पहलुओं को सरल बनाने के लिए अतिरिक्त निर्माण प्रदान करता है:

http://camel.apache.org/camel-23-threadpool-configuration.html

यदि आपको इस प्रकार की कोई आवश्यकता नहीं है और बस फ़ाइल, JMS, FTP समापन बिंदु आदि को कनेक्ट करना चाहते हैं ... तो बस स्प्रिंग इंटीग्रेशन का उपयोग करें।


2
आपके पास SI पोल और स्प्रिंग से कार्य निष्पादकों में थ्रेडपूल के ऊपर एक अमूर्तता है। एसआई में ओओटीबी आपके लिए कुछ भी नहीं है। : कार्य निष्पादक यहाँ कॉन्फ़िगर किया गया देखें static.springsource.org/spring-integration/docs/2.1.x/reference/...
cwash

@, क्या आप कृपया JMS पर मेरी पोस्ट पर एक नज़र डाल सकते हैं
शिक्षार्थी

-1

ऊंट आवेदन के लिए मिडलवेयर के रूप में कार्य करता है जहां व्यक्ति डेटा मॉडलिंग, संदेश मूल्यों के परिवर्तन और संदेशों की कोरियोग्राफी कर सकता है।


-3

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


ऊंट को वास्तव में स्प्रिंग के लिए बहुत समर्थन है और तीसरे पक्ष के कई घटकों को कवर करता है।
मीकहॉस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.