वास्तव में अपाचे ऊंट क्या है?


1360

मुझे समझ में नहीं आता है कि वास्तव में कैमल क्या करता है।

यदि आप 101 शब्दों में ऊंट का परिचय दे सकते हैं:

  • वास्तव में क्या है?
  • यह जावा में लिखे गए एप्लिकेशन के साथ कैसे इंटरैक्ट करता है?
  • क्या यह कुछ ऐसा है जो सर्वर के साथ मिलकर चलता है?
  • क्या यह एक स्वतंत्र कार्यक्रम है?

कृपया बताएं कि ऊंट क्या है।

जवाबों:


719

यदि आपके पास 5 से 10 मिनट हैं, तो मैं आमतौर पर लोगों को जोनाथन एंस्टी द्वारा अपाचे ऊंट के साथ इस एकीकरण को पढ़ने की सलाह देता हूं । यह एक अच्छी तरह से लिखा गया टुकड़ा है जो कैमल की कुछ अवधारणाओं का संक्षिप्त परिचय और अवलोकन देता है, और यह कोड नमूनों के साथ उपयोग के मामले को लागू करता है। इसमें जोनाथन लिखते हैं:

अपाचे कैमल एक ओपन सोर्स जावा फ्रेमवर्क है जो डेवलपर्स के लिए एकीकरण को आसान और अधिक सुलभ बनाने पर केंद्रित है। यह प्रदान करके ऐसा करता है:

  • सभी व्यापक रूप से उपयोग किए गए एंटरप्राइज़ एकीकरण पैटर्न (EIP) के ठोस कार्यान्वयन
  • ट्रांसपोर्ट और एपीआई की एक महान विविधता के लिए कनेक्टिविटी
  • EIP और ट्रांसपोर्ट को एक साथ तार करने के लिए डोमेन विशिष्ट भाषाओं (DSLs) का उपयोग करना आसान है

एक्शन में कैमल का एक मुफ्त अध्याय भी है जो पहले अध्याय में कैमल का परिचय देता है। जोनाथन मेरे साथ उस पुस्तक पर सह-लेखक हैं।


55
कैमल इन एक्शन बुक मूल बातें सीखने के लिए एक बहुत अच्छी किताब है और कैमल की कुछ और जटिल विशेषताओं का उपयोग भी करना है। मैं इसकी पुरजोर सलाह देता हूँ! (मैं किताब या प्रकाशक के साथ किसी भी तरह से संबद्ध नहीं हूँ)
मैट एल्ड्रिज

2
@ क्लिक करें अगर खच्चर ESB और ऊंट के बीच चयन करना चाहते हैं। एक ove को चुनने पर मेरा क्या विनाश होना चाहिए
khahajeyan

8
ऊंट प्रतियोगियों की तुलना में कुछ लिंक देखें : camel.apache.org/articles.html
क्लॉस इबसेन

1
हाँ, इसका उपयोग केवल कुछ ही जावा टूलकिट / फ्रेमवर्क के बाद, माइक्रोसिस्टर्स को जोड़ने के लिए किया जा सकता है। कैमल इन एक्शन 2 एडिशन बुक में कैमल माइक्रोसर्विस पर एक पूरा अध्याय है।
क्लॉस इब्सन

1
"एंटरप्राइज इंटीग्रेशन पैटर्न (EIP)" आप क्या पूछते हैं? आपको केवल यह पता लगाना है कि "पुस्तक एंटरप्राइज इंटिग्रेशन पैटर्न खरीदें ..."
जोस क्विनटिरो

1130

इसे और अधिक सुलभ तरीके से वर्णन करने के लिए ...

अपाचे ऊंट क्या है, यह समझने के लिए, आपको यह समझने की आवश्यकता है कि एंटरप्राइज़ एकीकरण पैटर्न क्या हैं।

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

ज्यादातर चार के गिरोह की तरह, ग्रेगर Hohpe और बॉबी वूल्फ पुस्तक लिखी उद्यम एकीकरण पैटर्न (EIP) जिसमें वे प्रस्ताव और नए पैटर्न और का एक सेट दस्तावेज़ ब्लूप्रिंट हम कैसे कर सकता है के लिए सबसे अच्छा डिजाइन बड़े घटक आधारित प्रणाली है, जहां घटक हो सकता है एक ही प्रक्रिया पर या एक अलग मशीन में चल रहा है।

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

तो क्या है अपाचे ऊंट?

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

MVC लें। MVC सिद्धांत में बहुत सरल है और हम इसे किसी भी ढांचे की मदद के बिना लागू कर सकते हैं। लेकिन अच्छे MVC फ्रेमवर्क हमें संरचना को तैयार करने के लिए प्रदान करते हैं और अतिरिक्त मील चले गए हैं और अन्य सभी "पक्ष" चीजों को सोचा है जब आपको एक बड़ी एमवीसी परियोजना बनाते हैं और इसीलिए हम उनका ज्यादातर समय उपयोग करते हैं।

यह वही है जो Apache ऊंट EIP के लिए है। यह उन लोगों के लिए एक पूर्ण उत्पादन-तैयार ढांचा है जो ईआईपी का पालन करने के लिए अपने समाधान को लागू करना चाहते हैं।


183
यह शायद सवाल का सबसे अच्छा जवाब है। अन्य सभी उत्तर इंटरनेट पर अन्य सभी लेखों की तरह ही भ्रमित करने वाले हैं
नेरवे

19
EIP कुंजी है। यदि आप ईआईपी को नहीं समझते हैं, तो आप अंधे पुरुषों और हाथी (ऊंट) की तरह ऊंट का उपयोग कर सकते हैं। EIP - eaipatterns.com
hutingung

22
इस उत्तर के लिए +50 - ईआईपी पर परिचय के साथ शुरू और इसे GOF और MVC और चौखटे के साथ सादृश्य। सवाल से, ऐसा लगता है कि ओपी को ईआईपी का विचार नहीं है। मैं एक ही नाव में था, इस जवाब को पढ़ने से पहले
शिक्षार्थी

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

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

659

प्रोजेक्ट विवरण बनाना जटिल नहीं होना चाहिए।

मैं कहता हूँ:

अपाचे कैमल राउटिंग के साथ टेक्नोलॉजी ग्लू को मैसेज कर रही है। यह एक साथ मैसेजिंग स्टार्ट और एंड पॉइंट से जुड़ता है जो विभिन्न स्रोतों से संदेशों को विभिन्न गंतव्यों तक स्थानांतरित करने की अनुमति देता है। उदाहरण के लिए: JMS -> JSON, HTTP -> JMS या फ़नलिंग FTP -> JMS, HTTP -> JMS, JSON -> JMS

विकिपीडिया कहता है:

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

देख? यह मुश्किल नहीं था?


307
अपाचे कैमल होमपेज इस धागे को संदर्भित करता है ... वे अपने स्वयं के उत्पाद की एक छोटी कार्यात्मक व्याख्या प्रदान करने का प्रबंधन नहीं करते थे।
youri

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

1
यह एक ठीक अनाज रिवर्स प्रॉक्सी की तरह है?
असद हसन

1
मुझे यह जवाब कैमल होमपेज लिंक के माध्यम से मिला। यह मुझे बेवकूफ़ बनाता है कि वे इसे सीधे अपने पृष्ठ पर उद्धृत नहीं करते हैं या यहां तक ​​कि विशिष्ट में उत्तर के लिए लिंक नहीं करते हैं।
Jelling

9
अब, यह वही है जो मैं कुरकुरा और बिंदु उत्तर के लिए कहता हूं। अजीब तरह से, स्वीकृत जवाब एक विज्ञापन की तरह दिखता है। +1
EMM

120

संक्षेप में:

जब सिस्टम को जोड़ने / एकीकृत करने की आवश्यकता होती है, तो आपको संभवतः कुछ डेटा स्रोत से कनेक्ट करने की आवश्यकता होगी और फिर इस डेटा को आपकी व्यावसायिक आवश्यकताओं से मेल खाने के लिए संसाधित करना होगा।

ऐसा करने के क्रम में:

1) आप कस्टम प्रोग्राम विकसित कर सकते हैं जो यह करेगा (समय लेने और समझने में कठिन हो सकता है, अन्य डेवलपर के लिए बनाए रख सकता है)

2) वैकल्पिक रूप से, आप अपाचे ऊंट का उपयोग मानकीकृत तरीके से करने के लिए कर सकते हैं (इसमें आपके लिए पहले से विकसित अधिकांश कनेक्टर हैं, आपको बस इसे सेट करने और अपने तर्क को प्लग करने की आवश्यकता है - प्रक्रिया कहा जाता है):

ऊंट आपकी मदद करेगा:

  1. किसी भी स्रोत / प्रारूप से डेटा का उपभोग करें
  2. इस डेटा को प्रोसेस करें
  3. किसी भी स्रोत / प्रारूप में आउटपुट डेटा

Apache Camel का उपयोग करके आप अपने सिस्टम को दूसरे डेवलपर को समझने / बनाए रखने / बढ़ाने में आसानी करेंगे।

अपाचे कैमल को एंटरप्राइज इंटीग्रेशन पैटर्न के साथ विकसित किया गया है। पैटर्न आपको सिस्टम को अच्छे तरीके से एकीकृत करने में मदद करते हैं :-)


इसका मतलब है कि अन्य डेवलपर्स तर्क को किसी अन्य प्रोग्रामिंग भाषा में भी बदल सकते हैं?
JavaTechnical

1
@JavaTechnical ने मैसेजिंग पैटर्न (EIP) दिया, आप पहले से ही विभिन्न घटकों को विभिन्न भाषाओं में कोड कर सकते हैं क्योंकि ये संदेश JSON जैसे भाषा स्वतंत्र स्वरूपों में हैं। ऊंट ईआईपी को लागू करने के लिए एक आसान ढांचा प्रदान करता है। यह मेरी समझ पर आधारित है। अगर मुझसे गलती हुई है तो कृपया मुझे सुधारें।
धीरज भास्कर

98

ऊंट A से B तक संदेश भेजता है:

यहां छवि विवरण दर्ज करें

इसके लिए एक पूरी रूपरेखा क्यों? ठीक है, अगर आपके पास है:

  • कई प्रेषक और कई रिसीवर
  • प्रोटोकॉल के एक दर्जन से अधिक ( ftp, http, jms, आदि)
  • कई जटिल नियम
    • केवल A और B को A को संदेश भेजें
    • XML के रूप में रिसीवर C के लिए एक संदेश भेजें , लेकिन आंशिक रूप से इसका अनुवाद करें , इसे समृद्ध करें (मेटाडेटा जोड़ें) और IF स्थिति X , तो इसे रिसीवर D को भी भेजें, लेकिन CSV के रूप में

तो अब आप की जरूरत है:

  • प्रोटोकॉल के बीच अनुवाद
  • एक साथ गोंद घटकों
  • परिभाषित मार्ग - क्या कहाँ जाता है
  • कुछ मामलों में कुछ चीजों को फ़िल्टर करें

ऊंट आपको बॉक्स से बाहर (और अधिक) देता है:

यहां छवि विवरण दर्ज करें

क्या और कैसे परिभाषित करें:

  new DefaultCamelContext().addRoutes(new RouteBuilder() {
        public void configure() {
            from("jms:incomingMessages")
                    .choice() // start router rules
                    .when(header("CamelFileName")
                            .endsWith(".xml"))
                    .to("jms:xmlMessages")
                    .when(header("CamelFileName")
                            .endsWith(".csv"))
                    .to("ftp:csvMessages");
}

यह भी देखें इस और इस और कार्रवाई में कैमल (के रूप में अन्य लोगों ने कहा, एक उत्कृष्ट पुस्तक!)


75

एक आरेख हजारों विवरणों से बेहतर है। यह आरेख कैमल की वास्तुकला को दर्शाता है।

यहां छवि विवरण दर्ज करें


55

विश्लेषण पर आधारित

कैमल आधारित रूटिंग को एक एयरलाइन मालिक (जैसे: अमेरिकन एयरलाइंस, जेट एयरवेज) के जूते में खुद को डालकर आसानी से समझा जा सकता है।

Passengers अपनी एयरलाइन ’का उद्देश्य दुनिया में एक to शहर’ से दूसरे में airline यात्रियों ’को ले जाना है। आप यात्रियों को ले जाने के लिए बोइंग, एयरबस, एचएएल जैसी विभिन्न 'विमान कंपनियों' से हवाई जहाजों का उपयोग करते हैं।

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

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

प्रत्येक शहर के समान Same हवाई अड्डे ’के बुनियादी ढांचे का उपयोग 'प्रस्थान’ यात्रियों और passengers आगमन ’यात्रियों द्वारा किया जाता है। एक हवाई अड्डा यात्रियों को प्रस्थान करने के लिए 'प्रस्थान बुनियादी ढांचा' प्रदान करता है, जो आने वाले यात्रियों के लिए प्रदान किए गए 'आगमन बुनियादी ढांचे' से अलग है।

यात्रा के दौरान, आपकी एयरलाइंस द्वारा विमान के अंदर प्रदान की गई विभिन्न provided सुविधाओं ’के कारण यात्री अपनी गतिविधियों को जारी रख सकते हैं।

उसके शीर्ष पर, आपकी एयरलाइन 'स्थानीय भाषा को समझने' और 'यात्रा' के लिए आपको तैयार करने जैसे विशेष उपचारों के लिए लाउंज सुविधाएं भी प्रदान करती है।

उपरोक्त कुछ शब्दों / वाक्यांशों को निम्नलिखित के साथ प्रयोग करने दें:

आपकी एयरलाइन: अपाचे कैमल

विमान कंपनियों: परिवहन तंत्र

आपकी एयरलाइन का विमान: अपाचे कैमल का अंतर्निहित परिवहन तंत्र

कैरी: मार्ग

यात्रियों: संदेश;

शहर: सिस्टम;

हवाई अड्डे: ऊंट घटक;

स्थानीय भाषाओं को समझना: प्रकार रूपांतरण;

प्रस्थान: उत्पादन, उत्पादन

आगमन: भस्म, भस्म

यात्रा: रूट किया गया

सुविधाएं: प्रदान की जाती हैं

शब्दों को बदलने के बाद, यहाँ आपको जो मिलता है:

'अपाचे कैमल' का उद्देश्य दुनिया में ' संदेशों' को एक 'सिस्टम' से दूसरे में रूट करना है। संदेश मार्ग के लिए अपाचे ऊंट विभिन्न परिवहन तंत्र का उपयोग करता है।

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

ध्यान दें कि सिस्टम से 'उत्पादित' एक संदेश अनिवार्य रूप से अपाचे ऊंट के अंतर्निहित परिवहन तंत्र में 'भस्म' हो जाता है। और एक सिस्टम द्वारा खपत संदेश, अनिवार्य रूप से 'अपाचे कैमल के अंतर्निहित परिवहन तंत्र' द्वारा उत्पादित किया जाता है।

चूँकि हम ऊँट को समझने की कोशिश कर रहे हैं, इसलिए हमें यहाँ ऊँट के दृष्टिकोण से सोचना चाहिए। इस प्रकार, 'उपभोक्ता संदेश' और 'निर्माता संदेश' के अर्थ इस प्रकार हैं, जो हमारी पारंपरिक धारणाओं से उलट हैं जो एक प्रणाली के परिप्रेक्ष्य पर आधारित हैं।

समान 'ऊंट आधारित घटक' का कोडिंग बुनियादी ढांचा 'निर्माता संदेश' और 'उपभोक्ता संदेश' द्वारा उपयोग किया जाता है। एक 'कैमल बेस्ड कंपोनेंट' 'प्रोड्यूसर मैसेज' के लिए 'प्रोड्यूसर एंडपॉइंट' और 'कंज्यूमर मैसेज' के लिए 'कंज्यूमर एंडपॉइंट' प्रदान करता है।

संदेश ऊंट द्वारा संसाधित किए जा सकते हैं जब वे रूट किए जा रहे हों।

इस रूटिंग के शीर्ष पर, कैमल 'प्रकार रूपांतरण' जैसी विशेष सुविधाएँ प्रदान करता है और कई और ...


महान विवरण पढ़ने के लिए अच्छा है और याद करने में आसान है। मुझे आश्चर्य है कि क्या भूमिका एक रनवे या पायलट की है, अगर वे ऊंट में भी मौजूद हैं।
स्टिम्पसन कैट

अच्छा विवरण विशेष रूप से हवाई अड्डे का उदाहरण इसे बनाए रखता है। अगर आप कुछ और विस्तारित शब्द जोड़ते हैं और कोड उदाहरण का थोड़ा सा टुकड़ा वास्तव में बहुत अच्छा होगा !! धन्यवाद
अंकुर Nirmalkar

50

अपाचे ऊंट को समझने की कोशिश करने से पहले आपको जिन चीजों को समझने की जरूरत है, उनमें से एक एंटरप्राइज इंटीग्रेशन पैटर्न हैं। क्षेत्र में हर कोई वास्तव में उनके बारे में नहीं जानता है। जब आप निश्चित रूप से एंटरप्राइज इंटीग्रेशन पैटर्न बुक पढ़ सकते हैं, तो उन पर गति प्राप्त करने का एक तेज़ तरीका एंटरप्राइज एप्लीकेशन इंटीग्रेशन पर विकिपीडिया लेख जैसा कुछ पढ़ना होगा ।

एक तो आपने विषय क्षेत्र को पढ़ा और समझा है, आप अपाचे ऊंट के उद्देश्य को समझने की अधिक संभावना होगी

HTH


35

यदि आप एंटरप्राइज़ इंटीग्रेशन पैटर्न से अवगत हैं, तो Apache ऊंट एक एकीकरण ढांचा है जो सभी EIP को लागू करता है।

और आप कैमल को वेब-कंटेनर में एक स्टैंडअलोन एप्लिकेशन के रूप में तैनात कर सकते हैं।

मूल रूप से, यदि आपको विभिन्न प्रोटोकॉल और तकनीकों के साथ कई अनुप्रयोगों को एकीकृत करना है, तो आप कैमल का उपयोग कर सकते हैं।


22

दूसरे दृष्टिकोण से एक परिभाषा:

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


18

वास्तव में क्या है?

Apache ऊंट एक हल्का एकीकरण ढांचा है जो सभी एंटरप्राइज़ एकीकरण पैटर्न को लागू करता है। आप आवश्यक पैटर्नों का उपयोग करके आसानी से विभिन्न अनुप्रयोगों को एकीकृत कर सकते हैं।

आप जावा, स्प्रिंग एक्सएमएल, स्काला या ग्रूवी का उपयोग कर सकते हैं। लगभग हर तकनीक जिसकी आप कल्पना कर सकते हैं, उदाहरण के लिए HTTP, FTP, JMS, EJB, JPA, RMI, JMS, JMX, LDAP, Netty आदि उपलब्ध है।

इस लेख और ईआईपी पैटर्न लेख पर एक नज़र डालें

यह जावा में लिखे गए एप्लिकेशन के साथ कैसे इंटरैक्ट करता है?

ऊँट नीचे सूचीबद्ध डोमेन-विशिष्ट भाषाओं (डीएसएल) की एक किस्म में एंटरप्राइज़ इंटीग्रेशन पैटर्न या रूट बनाने के लिए जावा डोमेन विशिष्ट भाषा या डीएसएल का उपयोग करता है ।

जावा डीएसएल - धाराप्रवाह बिल्डर शैली का उपयोग करते हुए एक जावा आधारित डीएसएल।

एंटरप्राइज इंटीग्रेशन पैटर्न की कहानी इन अवधारणाओं के आसपास है:

संदेश, अंत बिंदु, निर्माता, उपभोक्ता, रूटिंग, बस, ट्रांसफॉर्म और प्रक्रिया

वास्तविक समय उपयोग मामलों में से एक के लिए अनिर्बान कोनार के इस लेख पर एक नज़र डालें ।

क्या यह कुछ ऐसा है जो सर्वर के साथ मिलकर चलता है?

यह कई उद्यम उप प्रणालियों में एक पुल के रूप में कार्य करता है।

क्या यह एक स्वतंत्र कार्यक्रम है?

अपाचे कैमल, एक एकीकरण ढांचा, विभिन्न स्वतंत्र अनुप्रयोगों को एकीकृत करता है।

कैमल का प्रमुख लाभ : आप प्रत्येक एकीकरण के लिए एक ही अवधारणाओं का उपयोग करके विभिन्न तकनीकों (और विभिन्न प्रोटोकॉल) के साथ विभिन्न अनुप्रयोगों को एकीकृत कर सकते हैं।


मुझे आश्चर्य है कि आप "हल्के" शब्द का उपयोग क्यों करते हैं। मेरा अवलोकन है कि अपाचे कैमल वास्तव में भारी है।
Krzysztof Tomaszewski

13

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

अंतर-एप्लिकेशन मिडलवेयर के लिए कैमल एक जावा-आधारित आवरण / एपीआई है।

मिडलवेयर सॉफ्टवेयर के लिए एक सामान्य शब्द है जो उन संस्थाओं के बीच व्याख्या सेवाएं प्रदान करता है जो एक आम भाषा या डेटा प्रकार साझा नहीं करते हैं।

वह ऊंट है, जो सबसे नीचे है। हम इस विवरण को ध्यान में रखते हुए यह बता सकते हैं कि यह ईआईपी-टाइप मिडलवेयर के लिए प्रदान करता है।

यह स्वयं मिडलवेयर प्रदान नहीं करता है, क्योंकि यह इस बात का ब्योरा नहीं दे सकता है कि एप्लिकेशन को क्या संवाद करने की आवश्यकता है। लेकिन यह उस मिडलवेयर के इनवेरिएंट पार्ट्स बनाने के लिए एपीआई प्रदान करता है (एक शुरुआती बिंदु बनाएं, एक अंतिम बिंदु बनाएं, शुरू करने और समाप्त करने के लिए परिस्थितियां बनाएं, आदि)

उम्मीद है की वो मदद करदे।


4
"कंप्यूटिंग में" सबसे नई "चीजें वास्तव में बिल्कुल भी नई नहीं हैं, वे बस एक रहस्यमय आवरण है जो पहले से ही अच्छी तरह से समझी गई चीज़ के आसपास है।" <<<< सबसे अच्छी बात जो मैंने पूरे सप्ताह पढ़ी है!
डेव

8

यहाँ यह एक और प्रयास है।

आप जानते हैं कि Webmethods, ICAN Seebeyond, Tibco BW, IBM Broker जैसी चीजें कैसे हैं / हैं। वे सभी उद्यम में एकीकरण समाधानों के साथ मदद करते थे। इन उपकरणों को आमतौर पर एंटरप्राइज एप्लिकेशन इंटीग्रेशन (ईएआई) उपकरण के नाम से जाना जाता है।

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

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

यद्यपि एकीकरण समाधानों को लागू करना काफी संभव है जो एक या कई ईआईपी का उपयोग करते हैं, कैमल एक्सएमएल, जावा, ग्रूवी या स्काला में से एक का उपयोग करके अपने कोड बेस के भीतर ऐसा करने का प्रयास है।

ऊंट अपने समृद्ध डीएसएल और रूटिंग तंत्र के माध्यम से पुस्तक में सूचीबद्ध सभी एंटरप्राइज़ एकीकरण पैटर्न का समर्थन करता है।

तो ऊंट आपके एकीकरण कोड के परीक्षण के लिए बेहतर समर्थन के साथ अन्य ईएआई उपकरणों के लिए एक प्रतिस्पर्धी टेक्नोलॉय है। डोमेन विशिष्ट भाषाओं (DSLs) के कारण कोड संक्षिप्त है। यह भी व्यापार उपयोगकर्ताओं द्वारा पठनीय है और यह मुफ़्त है और आपको उत्पादक बनाता है।


7

बहुत सारी रूपरेखाएं हैं जो हमें संदेश भेजने और संदेश भेजने में समस्याओं को हल करने की सुविधा प्रदान करती हैं। ऐसा ही एक उत्पाद है अपाचे कैमल।

अधिकांश सामान्य समस्याओं ने समाधानों को साबित किया है जिन्हें डिज़ाइन पैटर्न कहा जाता है। मैसेजिंग के लिए डिजाइन पैटर्न एंटरप्राइज इंटीग्रेशन पैटर्न (EIP) है, जो यहां अच्छी तरह से समझाया गया है । अपाचे ऊंट ईआईपी का उपयोग करके हमारे समाधान को लागू करने में हमारी मदद करते हैं।

एक एकीकरण ढांचे की ताकत ईआईपी या अन्य पैटर्न के माध्यम से हमें सुविधा प्रदान करने की क्षमता है, परिवहन और घटकों की संख्या और विकास में आसानी जिस पर अपाचे ऊंट सूची के शीर्ष पर खड़ा है

फ्रेमवर्क के प्रत्येक के अपने फायदे हैं अपाचे ऊंट की कुछ विशेष विशेषताएं निम्नलिखित हैं।

  1. यह जावा DSL और स्प्रिंग xml आधारित DSL जैसे कई DSLs में कोडिंग प्रदान करता है, जो लोकप्रिय हैं।
  2. आसान उपयोग और उपयोग करने में सरल।
  3. फ्यूज आईडीई एक उत्पाद है जो आपको यूआई के माध्यम से कोड करने में मदद करता है

7

सादे अंग्रेजी में, ऊंट प्लेट कोड के बिना बहुत सी चीजें प्राप्त करता है (कई)।

बस आपको एक परिप्रेक्ष्य देने के लिए, नीचे दी गई जावा डीएसएल एक REST समापन बिंदु बनाएगी जो उत्पादों की सूची से मिलकर एक XML को स्वीकार करने में सक्षम होगा और इसे कई उत्पादों में विभाजित करेगा और इसके साथ BrandProcessor की प्रक्रिया विधि लागू करेगा। और बस .parallelProcessing (टिप्पणी भाग से बाहर) जोड़कर यह सभी उत्पाद ऑब्जेक्ट को समानांतर प्रक्रिया देगा। (प्रोडक्ट क्लास JAXB / XJC है जो XSD से जावा स्टब जेनरेट करता है जिसे इनपुट xml तक सीमित रखा गया है।) इस कोड (कुछ कैमल निर्भरता के साथ) को वह काम मिलेगा, जो जावा कोड की 100s लाइन्स लेता था।

from("servlet:item-delta?matchOnUriPrefix=true&httpMethodRestrict=POST")
.split(stax(Product.class))
/*.parallelProcessing()*/
.process(itemDeltaProcessor);

रूट आईडी और लॉगिंग स्टेटमेंट जोड़ने के बाद

from("servlet:item-delta?matchOnUriPrefix=true&httpMethodRestrict=POST")
.routeId("Item-DeltaRESTRoute")
.log(LoggingLevel.INFO, "Item Delta received on Item-DeltaRESTRoute")
.split(stax(Product.class))
.parallelProcessing()
.process(itemDeltaProcessor);

यह सिर्फ एक नमूना है, कैमल सिर्फ REST अंत बिंदु से बहुत अधिक है। बस एक प्लग करने योग्य घटक सूची देखें http://camel.apache.org/compords.html


6

ऊंट मार्ग परिवर्तन, निगरानी में मदद करता है।

यह मार्गों का उपयोग करता है; जिसका वर्णन इस प्रकार किया जा सकता है:

जब सेवा बस को विशेष संदेश प्राप्त होता है, तो वह इसे सेवाओं / ब्रोकर गंतव्यों जैसे कतार / विषयों के माध्यम से रूट करेगी। इस मार्ग को मार्ग के रूप में जाना जाता है।

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


5

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


5

101 शब्द परिचय

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

विस्तारित इंट्रो

सतह पर, कैमल की कार्यक्षमता पारंपरिक एंटरप्राइज सर्विस बस उत्पादों को टक्कर देती है। हम आम तौर पर एक कैमल रूट को "मध्यस्थता" (उर्फ ऑर्केस्ट्रेशन) घटक मानते हैं जो सर्वर साइड पर रहता है, लेकिन क्योंकि यह एक जावा लाइब्रेरी है जिसे एम्बेड करना आसान है और यह क्लाइंट साइड ऐप पर भी ठीक से रह सकता है और आपको एकीकृत करने में मदद कर सकता है। पॉइंट टू पॉइंट सर्विसेज (उर्फ कोरियोग्राफी)। आप अपने POJO भी ले सकते हैं जो कैमल मार्ग के अंदर संदेशों को संसाधित करते हैं और आसानी से उन्हें अपने दूरस्थ उपभोक्ता प्रक्रियाओं में बंद कर देते हैं, उदाहरण के लिए यदि आपको स्वतंत्र रूप से सिर्फ एक टुकड़ा स्केल करने की आवश्यकता है। आप अपनी आवश्यकताओं के आधार पर विभिन्न दूरस्थ परिवहन / प्रोटोकॉल के माध्यम से मार्गों या प्रोसेसर को जोड़ने के लिए कैमल का उपयोग कर सकते हैं। क्या आपको एक अत्यंत कुशल और तेज़ बाइनरी प्रोटोकॉल की आवश्यकता है, या वह जो अधिक मानव पठनीय और डिबग करने में आसान है? यदि आप स्विच करना चाहते हैं तो क्या होगा? कैमल के साथ यह आमतौर पर आपके मार्ग में एक या दो लाइन बदलने और किसी भी व्यावसायिक तर्क को बदलने में आसान नहीं है। या आप दोनों का समर्थन कर सकते हैं - आप एक ऊंट के संदर्भ में एक बार में कई रूट चलाने के लिए स्वतंत्र हैं।

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

अगर आप माइक्रोसर्विस करने की कोशिश कर रहे हैं तो कुल मिलाकर कैमल एक बेहतरीन फिट है। मैंने इसे विकासवादी वास्तुकला के लिए अमूल्य पाया है, क्योंकि आप प्रोटोकॉल, ट्रांसपोर्ट और अन्य सिस्टम एकीकरण समस्याओं के बारे में कई कठिन, "आसान-से-गलत-गलत" निर्णय ले सकते हैं जब तक कि आप अपने समस्या डोमेन के बारे में अधिक नहीं जानते। बस अपने EIP और मुख्य व्यवसाय तर्क पर ध्यान केंद्रित करें और नए रूट पर "सही" घटकों के साथ स्विच करें क्योंकि आप अधिक सीखते हैं।


4

हाँ, यह शायद थोड़ी देर है। लेकिन हर किसी की टिप्पणियों में जोड़ने के लिए एक बात यह है कि, कैमल वास्तव में सुविधाओं के एक पूरे सेट के बजाय एक टूलबॉक्स है। आपको इसे विकसित करते समय और विभिन्न परिवर्तनों और प्रोटोकॉल रूपांतरणों को करने की आवश्यकता को ध्यान में रखना चाहिए।

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


4

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

जावा डीएसएल

from("jetty://0.0.0.0:8080/searchProduct").routeId("searchProduct.products").threads()
    .log(LoggingLevel.INFO, "searchProducts request Received with body: ${body}")
    .bean(Processor.class, "createSearchProductsRequest").removeHeaders("CamelHttp*")
    .setHeader(Exchange.HTTP_METHOD, constant(org.apache.camel.component.http4.HttpMethods.POST))
    .to("http4://" + preLiveBaseAPI + searchProductsUrl + "?apiKey=" + ApiKey
                    + "&bridgeEndpoint=true")
    .bean(Processor.class, "buildResponse").log(LoggingLevel.INFO, "Search products finished");

यह केवल REST API समापन बिंदु बनाना है जो बदले में बाहरी API कॉल करता है और अनुरोध वापस भेजता है

स्प्रिंग डीएसएल

<route id="GROUPS-SHOW">
    <from uri="jetty://0.0.0.0:8080/showGroups" />
    <log loggingLevel="INFO" message="Reqeust receviced service to fetch groups -> ${body}" />
    <to uri="direct:auditLog" />
    <process ref="TestProcessor" />
</route>

आपके सवालों के जवाब में आ रहा हूं

  1. वास्तव में क्या है? उत्तर: - यह एक ढांचा है जो एंटरप्राइज़ एकीकरण पैटर्न को लागू करता है
  2. यह जावा में लिखे गए एप्लिकेशन के साथ कैसे इंटरैक्ट करता है? Ans: - यह किसी भी उपलब्ध प्रोटोकॉल जैसे http, ftp, amqp आदि के साथ इंटरैक्ट कर सकता है
  3. क्या यह कुछ ऐसा है जो सर्वर के साथ मिलकर चलता है? Ans: - इसे टेंकैट जैसे कंटेनर में तैनात किया जा सकता है या जावा प्रक्रिया के रूप में स्वतंत्र रूप से तैनात किया जा सकता है
  4. क्या यह एक स्वतंत्र कार्यक्रम है? Ans: - यह हो सकता है।

आशा है ये मदद करेगा


3

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

Apache Camel जावा वर्चुअल मशीन (JVM) पर चलती है। ... अपाचे कैमल की मुख्य कार्यक्षमता इसका रूटिंग इंजन है। यह संबंधित मार्गों के आधार पर संदेश आवंटित करता है। एक मार्ग में प्रवाह और एकीकरण तर्क शामिल हैं। यह ईआईपी और एक विशिष्ट डीएसएल का उपयोग करके कार्यान्वित किया जाता है।

यहां छवि विवरण दर्ज करें


1
ईआईपी में ऊंट 40 पैटर्न को लागू करता है: उद्यम एकीकरण पैटर्न।
याकूब

2

इसकी तरह एक पाइप लाइन कनेक्ट है

From---->To

यू के बीच में कई चैनल और पाइप जोड़ सकते हैं। नल डेटा के प्रवाह के लिए किसी भी प्रकार के स्वचालित या मैनुअल हो सकता है और प्रवाह को चैनलाइज़ करने के लिए एक मार्ग है।

यह सभी प्रकार और प्रसंस्करण के प्रकारों के लिए समर्थन और कार्यान्वयन है। और एक ही प्रसंस्करण के लिए कई दृष्टिकोण हैं क्योंकि इसमें कई घटक हैं और प्रत्येक घटक इसके तहत विभिन्न तरीकों का उपयोग करके वांछित आउटपुट भी प्रदान कर सकता है।

उदाहरण के लिए, फ़ाइल स्थानांतरण ऊँट में स्थानांतरित की गई फ़ाइल या कॉपी और फ़ोल्डर, सर्वर या कतार से भी किया जा सकता है।

-from-->To
   - from-->process-->to
   - from-->bean-->to
   - from-->process-->bean-->to
   -from-->marshal-->process-->unmarshal-->to

/ से ---- फोल्डर, डायरेक्ट, सेडा, वीएम कुछ भी हो सकता है


0

एक और दृष्टिकोण (अधिक मौलिक गणितीय विषयों पर आधारित)

सबसे सामान्य कंप्यूटिंग प्लेटफॉर्म एक [ https://en.wikipedia.org/wiki/Turing_machine] है

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

प्रश्न: हम स्वतंत्र ट्यूरिंग-मशीन को सबसे सामान्य तरीके से एक-दूसरे से बात करने का प्रबंधन कैसे करते हैं ताकि प्रत्येक ट्यूरिंग-मशीन अपने साथियों को इनपुट-डेटा या आउटपुट-डेटा के सिंक के स्रोत के रूप में देखे?

उत्तर: ऊंट, खच्चर, बिज़टॉक या किसी अन्य ईएसबी जैसी किसी चीज का उपयोग करना जो अलग-अलग "भौतिक" (या आभासी सॉफ़्टवेयर) ट्यूरिंग मशीनों को पूरा करने के बीच डेटा हैंडलिंग को अमूर्त करता है।

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