नमस्ते! मेरा नाम व्याचेस्लाव अक्सेनोव है और मैं जावा और कोटलिन में जटिल बैकएंड सिस्टम विकसित करने में विशेषज्ञता वाला एक बैकएंड डेवलपर हूं। इसके अलावा, मेरे कई छोटे पालतू प्रोजेक्ट हैं, जिन्हें आप मेरे GitHub: https://github.com/v-aksenov पर पा सकते हैं
एक माइक्रोसर्विस एक छोटी, स्वतंत्र सेवा है जिसे एक बड़े एप्लिकेशन के भीतर एक विशिष्ट कार्य या कार्यों के सेट को करने के लिए डिज़ाइन किया गया है। प्रत्येक माइक्रोसेवा को सिस्टम में अन्य माइक्रोसर्विसेज से स्वतंत्र रूप से विकसित और तैनात किया जाता है, और एपीआई के माध्यम से अन्य माइक्रोसर्विसेज के साथ संचार करता है।
माइक्रोसर्विसेज कई अन्य लाभ भी प्रदान करता है, जिसमें बेहतर मापनीयता, बेहतर दोष सहिष्णुता और बढ़ी हुई चपलता शामिल है। किसी एप्लिकेशन को छोटी, अधिक स्वतंत्र सेवाओं में विभाजित करके, डेवलपर आवश्यकतानुसार अलग-अलग घटकों को आसानी से बढ़ा या घटा सकते हैं, और उपयोगकर्ता की ज़रूरतों या बाज़ार की स्थितियों में बदलाव का तुरंत जवाब दे सकते हैं।
हालाँकि, माइक्रोसर्विसेज कुछ चुनौतियों का भी परिचय देते हैं, जैसे कि मजबूत एपीआई प्रबंधन, सेवा खोज और वितरित अनुरेखण की आवश्यकता। माइक्रोसर्विसेज को उचित रूप से डिजाइन और कार्यान्वित करने के लिए विकास टीम में सावधानीपूर्वक योजना और समन्वय की आवश्यकता होती है, साथ ही विकसित की जा रही प्रणाली की अनूठी आवश्यकताओं और बाधाओं की गहरी समझ होती है।
इस प्रश्न का उत्तर देने के लिए हमें इस प्रश्न का उत्तर देना होगा कि "यह वर्तमान सेवा किसके लिए जिम्मेदार है?"
सेवा व्यापार तर्क में अक्सर ऐसी स्थिति होती है जब हमें तीसरे पक्ष के एपीआई से प्रतिक्रिया प्राप्त करने की आवश्यकता होती है। या इसके अलावा, हमारे पास अपनी व्यावसायिक प्रक्रिया को संभालने के लिए श्रृंखला में कई माइक्रोसर्विसेज हैं। इन स्थितियों में हमें अपने माइक्रोसर्विसेज में HTTP क्लाइंट को लागू करना होगा।
एक माइक्रोसर्विस आर्किटेक्चर में, एक HTTP क्लाइंट एक सॉफ्टवेयर घटक है जो HTTP प्रोटोकॉल पर अन्य माइक्रोसर्विसेज के साथ संचार करता है। HTTP क्लाइंट अन्य माइक्रोसर्विसेज के लिए अनुरोध करने और प्रतिक्रिया वापस प्राप्त करने के लिए जिम्मेदार है।
जब एक माइक्रोसर्विस को किसी अन्य माइक्रोसर्विस के साथ संवाद करने की आवश्यकता होती है, तो यह आमतौर पर अन्य माइक्रोसर्विसेज के उपयुक्त समापन बिंदु पर एक HTTP अनुरोध भेजता है। HTTP अनुरोध में डेटा का पेलोड शामिल हो सकता है, जैसे कि JSON ऑब्जेक्ट या XML दस्तावेज़, जिसे प्राप्त करने वाला माइक्रोसर्विस अपना कार्य करने के लिए उपयोग कर सकता है।
स्प्रिंग बूट सेवा में HTTP क्लाइंट को लागू करने के लिए आप कई तरीके चुन सकते हैं। सबसे पहले आपको चुनने की आवश्यकता है - क्या यह एक तुल्यकालिक या अतुल्यकालिक ग्राहक होगा?
उदाहरण के लिए, यदि आपके पास सिंक्रोनस आर्किटेक्चर है, तो आप स्प्रिंग बूट द्वारा प्रदान किए गए समाधानों में से एक चुन सकते हैं।
स्प्रिंग बूट में, एक सिंक्रोनस HTTP क्लाइंट एक घटक है जिसका उपयोग अन्य सेवाओं या समापन बिंदुओं के लिए HTTP अनुरोध करने के लिए किया जाता है, और प्रतिक्रिया प्राप्त होने तक वर्तमान थ्रेड को ब्लॉक करता है। स्प्रिंग बूट सिंक्रोनस HTTP क्लाइंट को लागू करने के लिए कई विकल्प प्रदान करता है, जिसमें RestTemplate
और WebClient
क्लास शामिल हैं।
स्प्रिंग बूट में सिंक्रोनस HTTP क्लाइंट को लागू करने के लिए RestTemplate
एक लोकप्रिय विकल्प है। यह HTTP अनुरोध करने और प्रतिक्रियाओं को संभालने के लिए एक सरल और सहज एपीआई प्रदान करता है, और HTTP विधियों, अनुरोध और प्रतिक्रिया प्रकारों और संदेश कन्वर्टर्स की एक विस्तृत श्रृंखला का समर्थन करता है। RestTemplate
का उपयोग करने के लिए, आपको इसे अपने एप्लिकेशन संदर्भ में एक बीन के रूप में कॉन्फ़िगर करने की आवश्यकता है, और फिर इसके विभिन्न तरीकों को कॉल करके HTTP अनुरोध करने के लिए इसका उपयोग करें।
POST HTTP रिक्वेस्ट के लिए रेस्टटेम्प्लेट के उपयोग का उदाहरण है:
public RegisterResponse registerUser(UserDto userDto) { HttpEntity<UserDto> requestEntity = new HttpEntity<>(user, headers); ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, requestEntity, RegisterResponse.class); if (responseEntity.getStatusCode() == HttpStatus.OK) { RegisterResponse response = responseEntity.getBody(); // handle the response } else { // handle the error } }
स्प्रिंग बूट में सिंक्रोनस HTTP क्लाइंट को लागू करने का एक अन्य विकल्प WebClient
क्लास का उपयोग करना है। WebClient
एक प्रतिक्रियाशील HTTP क्लाइंट है जो HTTP अनुरोध करने और प्रतिक्रियाओं को संभालने के लिए एक गैर-अवरुद्ध एपीआई प्रदान करता है, और उन अनुप्रयोगों के लिए उपयुक्त है जिनके लिए उच्च स्तर की संगामिति या मापनीयता की आवश्यकता होती है। WebClient
का उपयोग करने के लिए, आपको इसे अपने एप्लिकेशन संदर्भ में एक बीन के रूप में कॉन्फ़िगर करने की आवश्यकता है, और फिर इसके विभिन्न तरीकों को कॉल करके HTTP अनुरोध करने के लिए इसका उपयोग करें।
public RegisterResponse registerUser(UserDto userDto) { Mono<String> responseMono = webClient.post() .uri(endpointPath) .contentType(MediaType.APPLICATION_JSON) .body(Mono.just(user), UserDto.class) .retrieve() .bodyToMono(RegisterResponse.class); responseMono.subscribe(response -> { // handle the response }, error -> { // handle the error }); }
यह नोट करना महत्वपूर्ण है कि सिंक्रोनस HTTP क्लाइंट का उपयोग वर्तमान थ्रेड को ब्लॉक कर सकता है, जो आपके एप्लिकेशन के समग्र प्रदर्शन और मापनीयता पर नकारात्मक प्रभाव डाल सकता है। इस प्रकार, अतुल्यकालिक HTTP क्लाइंट का उपयोग करने की अनुशंसा की जाती है, जैसे प्रतिक्रियाशील प्रोग्रामिंग के साथ WebClient
, जब संभव हो तो अनुप्रयोग जवाबदेही और संसाधन उपयोग में सुधार करने के लिए।
संक्षिप्त उत्तर - आप Feign लाइब्रेरी का उपयोग कर सकते हैं। क्या है वह?
Feign एक जावा लाइब्रेरी है जो डेवलपर्स को आसानी से HTTP क्लाइंट बनाने की अनुमति देती है, विशेष रूप से RESTful माइक्रोसर्विसेज के निर्माण के लिए डिज़ाइन की गई है। यह HTTP एपीआई को परिभाषित करने का एक घोषणात्मक तरीका प्रदान करता है जिसे आपके कोड से कॉल किया जा सकता है जैसे कि वे स्थानीय विधि कॉल थे, जिससे एपीआई के साथ काम करना और विभिन्न माइक्रोसर्विसेज में संसाधनों का उपभोग करना आसान हो गया।
Feign के साथ, आप आसानी से ऐसे इंटरफ़ेस बना सकते हैं जो आपके RESTful समापन बिंदुओं के लिए HTTP विधियों, अनुरोध पैरामीटर और प्रतिक्रिया प्रकारों को परिभाषित करते हैं। फिर, Feign अनुरोधों और प्रतिक्रियाओं के क्रमांकन और अक्रमांकन, URL एन्कोडिंग, त्रुटि प्रबंधन और कनेक्शन प्रबंधन सहित बाकी का ध्यान रखता है।
यहाँ Feign का उपयोग करके उपयोगकर्ता पंजीकरण के लिए POST अनुरोध का एक उदाहरण दिया गया है:
// Client describes as interface with configuration: @FeignClient(name = "exampleRegisterClient") public interface RegisterClient { @PostMapping("/register") RegisterResponse registerUser(@RequestBody UserDto user); } // Bean creation in Spring configuration: @Bean public RegisterClient registerUserApi() { return Feign.builder().target(RegisterClient.class, "https://localhost:9090/api); }
Feign HTTP एपीआई के साथ बातचीत करने का एक सरल और घोषणात्मक तरीका प्रदान करता है, जिससे डेवलपर्स HTTP अनुरोध करने के विवरण के बजाय अपने माइक्रोसर्विसेज के व्यावसायिक तर्क पर ध्यान केंद्रित कर सकते हैं।
अंत में, स्प्रिंग बूट HTTP क्लाइंट को माइक्रोसर्विसेज में लागू करने के लिए कई विकल्प प्रदान करता है, जिसमें रेस्टेमप्लेट, वेबक्लाइंट और फीगन शामिल हैं। RestTemplate एक सरल और व्यापक रूप से उपयोग किया जाने वाला क्लाइंट है जो सिंक्रोनस HTTP संचार प्रदान करता है। WebClient एक अधिक आधुनिक और प्रतिक्रियाशील विकल्प है जो कार्यात्मक-शैली API के साथ गैर-अवरुद्ध HTTP संचार प्रदान करता है। Feign एक घोषणात्मक और प्रकार-सुरक्षित क्लाइंट है जो API परिभाषाओं के आधार पर कोड उत्पन्न करता है, जो RESTful microservices के लिए उपयोग में आसान इंटरफ़ेस प्रदान करता है।
किस HTTP क्लाइंट का उपयोग करना है, यह चुनते समय, आपके माइक्रोसर्विस की आवश्यकताओं पर विचार करना महत्वपूर्ण है, जैसे कि प्रदर्शन, मापनीयता और उपयोग में आसानी। रेस्टटेम्प्लेट सरल उपयोग के मामलों के लिए एक अच्छा विकल्प है जिसमें सिंक्रोनस संचार की आवश्यकता होती है। WebClient प्रतिक्रियाशील और गैर-अवरुद्ध उपयोग मामलों के लिए एक अच्छा विकल्प है जिसके लिए उच्च प्रदर्शन और मापनीयता की आवश्यकता होती है। घोषणात्मक और प्रकार-सुरक्षित उपयोग के मामलों के लिए Feign एक अच्छा विकल्प है, जिसके लिए सरलीकृत API और बेहतर डेवलपर अनुभव की आवश्यकता होती है।
आप चाहे जो भी HTTP क्लाइंट चुनें, यह सुनिश्चित करने के लिए एकीकरण परीक्षण लिखना महत्वपूर्ण है कि बाहरी सेवाओं के साथ इंटरैक्ट करते समय आपका माइक्रोसर्विस सही ढंग से व्यवहार करता है। अपने HTTP क्लाइंट का परीक्षण करके, आप यह सुनिश्चित कर सकते हैं कि आपकी माइक्रोसेवा विभिन्न परिदृश्यों में अपेक्षा के अनुरूप व्यवहार करती है, जैसे कि नेटवर्क विफलता या बाहरी सेवाओं से अप्रत्याशित प्रतिक्रियाएँ।
आप मेरे GitHub पर HTTP क्लाइंट लिखने के विभिन्न तरीकों को लागू करने के मेरे उदाहरण पा सकते हैं: https://github.com/v-aksenov
अनस्प्लैश पर दिसइसइंजीनियरिंग आरएएनजी द्वारा फोटो