Spring Boot 4 माइक्रोसर्विस और REST API · पाठ

Resilience4j के साथ सर्किट ब्रेकर

अपनी माइक्रोसर्विस में विफलताओं की श्रृंखला को रोकने के लिए Resilience4j का उपयोग करके सर्किट ब्रेकर प्रतिरूप लागू करें।

पाठ 1, कुल 3 में से12 चरण

Resilience4j के साथ सर्किट ब्रेकर, CoddyKit पर Spring Boot 4 माइक्रोसर्विस और REST API का एक निःशुल्क पाठ है। यह 3 में से 1वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Spring Boot 4 माइक्रोसर्विस और REST API सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Spring Boot 4 माइक्रोसर्विस और REST API पाठ्यक्रम में कुल 3 पाठ शामिल हैं।

लचीली माइक्रोसर्विस बनाना

माइक्रोसर्विस बहुत उपयोगी हैं, लेकिन वे नई चुनौतियाँ भी लेकर आती हैं। जब एक सेवा विफल होती है, तो उसे पूरी प्रणाली को बंद नहीं कर देना चाहिए। यहीं लचीलापन काम आता है।

लचीली प्रणालियाँ बनाने का अर्थ है कि वे विफलताओं से सहजता से उबर सकें और काम करती रहें, भले ही सीमित क्षमताओं के साथ। सेवा की उपलब्धता और उपयोगकर्ता अनुभव बनाए रखने के लिए यह बहुत महत्वपूर्ण है।

श्रृंखलाबद्ध विफलताओं से बचाव

सेवाओं की एक श्रृंखला की कल्पना कीजिए: सेवा A, B को कॉल करती है और B, C को कॉल करती है। यदि सेवा C धीमी या अनुत्तरदायी हो जाती है, तो सेवा B संसाधनों का उपयोग करते हुए प्रतीक्षा करेगी। फिर सेवा A, B के लिए प्रतीक्षा करेगी और इसी तरह यह क्रम चलता रहेगा।

अंततः, श्रृंखला की सभी सेवाएँ अपने संसाधन, जैसे थ्रेड या कनेक्शन, समाप्त कर सकती हैं और विफल हो सकती हैं। इससे पूरी प्रणाली बंद हो सकती है। इसे श्रृंखलाबद्ध विफलता कहते हैं और यह वितरित प्रणालियों में एक आम समस्या है।

सर्किट ब्रेकर पैटर्न

सर्किट ब्रेकर पैटर्न श्रृंखलाबद्ध विफलताओं को रोकने में मदद करता है। यह आपके घर के विद्युत सर्किट ब्रेकर जैसा है: यदि भार बहुत अधिक हो जाए, तो यह 'ट्रिप' होकर बिजली काट देता है और नुकसान से बचाता है।

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

Resilience4j: हमारा उपकरण

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

  • सर्किट ब्रेकर: विफल हो रही सेवाओं को बार-बार किए जाने वाले कॉल रोकता है।
  • पुनःप्रयास: विफल ऑपरेशन का अपने-आप पुनःप्रयास करता है।
  • दर सीमक: किसी सेवा को भेजे जाने वाले अनुरोधों की दर नियंत्रित करता है।

इस पाठ में हम विशेष रूप से सर्किट ब्रेकर पैटर्न पर ध्यान देंगे।

सेटअप: निर्भरता जोड़ना

सबसे पहले, अपने Spring Boot प्रोजेक्ट में आवश्यक निर्भरता जोड़ते हैं। Maven के लिए, इसे अपने pom.xml में जोड़ें:

<dependency>
<groupId>io.github.resilience4j</groupId>
<artifactId>resilience4j-spring-boot2</artifactId>
<version>2.2.0</version> <!-- Use latest stable -->
</dependency>

यह निर्भरता Resilience4j के मुख्य मॉड्यूल और आसान कॉन्फ़िगरेशन के लिए इसके Spring Boot एकीकरण को शामिल करती है।

सर्किट ब्रेकर कॉन्फ़िगर करना

हम अपने application.yml या application.properties में सर्किट ब्रेकर कॉन्फ़िगर कर सकते हैं। 'myExternalService' नाम वाली सेवा का एक बुनियादी उदाहरण यहाँ दिया गया है:

resilience4j.circuitbreaker:
instances:
myExternalService:
failureRateThreshold: 50
waitDurationInOpenState: 5s
slidingWindowType: COUNT_BASED
slidingWindowSize: 10

  • failureRateThreshold: यदि 50% कॉल विफल होते हैं, तो सर्किट खुल जाता है।
  • waitDurationInOpenState: सर्किट कितनी देर तक खुला रहता है (5 सेकंड)।
  • slidingWindowType और slidingWindowSize: आँकड़े पिछली 10 कॉल के आधार पर एकत्र किए जाते हैं।

सर्किट ब्रेकर लागू करना

अब @CircuitBreaker एनोटेशन का उपयोग करके किसी सेवा कॉल को सुरक्षित करते हैं। यह Spring को इस विधि पर "myExternalService" नाम वाला कॉन्फ़िगर किया गया सर्किट ब्रेकर लागू करने के लिए कहता है।

इस उदाहरण को चलाकर देखें। यदि callExternalService() बार-बार अपवाद उत्पन्न करता है (जैसा कि यहाँ अनुकरण किया गया है), तो सर्किट अंततः खुल जाएगा और कॉल को तुरंत अस्वीकार कर देगा।

package com.coddykit.resilience;

import io.github.resilience4j.circuitbreaker.annotation.CircuitBreaker;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Random;

@SpringBootApplication
@RestController
public class CircuitBreakerDemoApplication {

    private Random random = new Random();

    public static void main(String[] args) {
        SpringApplication.run(CircuitBreakerDemoApplication.class, args);
    }

    @GetMapping("/call-external")
    @CircuitBreaker(name = "myExternalService")
    public String callExternalService() {
        System.out.println("Attempting external service call...");
        if (random.nextBoolean()) { // Simulate 50% failure rate
            System.out.println("External service failed!");
            throw new RuntimeException("External Service Unavailable!");
        }
        System.out.println("External service call successful!");
        return "External Service Data";
    }
}

सर्किट ब्रेकर की अवस्थाएँ

सर्किट ब्रेकर मुख्य रूप से तीन अवस्थाओं में काम करता है:

  • CLOSED: सामान्य संचालन। कॉल आगे बढ़ते हैं। यदि विफलताएँ निर्धारित सीमा से अधिक हो जाएँ, तो यह OPEN में बदल जाता है।
  • OPEN: कॉल तुरंत एक त्रुटि के साथ अस्वीकार कर दिए जाते हैं। waitDurationInOpenState के बाद यह HALF_OPEN में बदल जाता है।
  • HALF_OPEN: सीमित संख्या में परीक्षण कॉल आगे जाने दिए जाते हैं। यदि ये सफल होते हैं, तो यह वापस CLOSED में बदल जाता है। यदि ये विफल होते हैं, तो यह फिर OPEN में लौट जाता है।

यह चक्र संघर्ष कर रही सेवा पर अत्यधिक भार पड़ने से रोकता है और उसे उबरने का अवसर देता है।

सहज फ़ॉलबैक

जब सर्किट ब्रेकर OPEN हो या किसी अन्य कारण से कॉल विफल हो, तो हम केवल एक सामान्य त्रुटि लौटाना नहीं चाहते। हम डिफ़ॉल्ट प्रतिक्रिया लौटाने या वैकल्पिक तर्क चलाने के लिए एक फ़ॉलबैक विधि उपलब्ध करा सकते हैं।

Resilience4j का @CircuitBreaker एनोटेशन आपको एक फ़ॉलबैक विधि निर्दिष्ट करने देता है, जिसे मुख्य विधि विफल होने या सर्किट खुले होने पर कॉल किया जाएगा। इससे सेवा में अधिक सहज रूप से सीमित कार्यक्षमता आती है।

फ़ॉलबैक के साथ सर्किट ब्रेकर

आइए अपने पिछले उदाहरण को फ़ॉलबैक विधि के साथ बेहतर बनाते हैं। जब सर्किट खुला हो या callExternalService() विफल हो, तब इसके बजाय fallbackMethod() चलाया जाएगा।

इसे चलाकर सर्किट ब्रेकर को सक्रिय करने का प्रयास करें। ध्यान दें कि बाहरी सेवा विफल होने या सर्किट खुले होने पर फ़ॉलबैक संदेश लौटाया जाता है, जिससे उपयोगकर्ता अनुभव बेहतर होता है।

package com.coddykit.resilience;

import io.github.resilience4j.circuitbreaker.annotation.CircuitBreaker;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Random;

@SpringBootApplication
@RestController
public class CircuitBreakerWithFallbackApplication {

    private Random random = new Random();

    public static void main(String[] args) {
        SpringApplication.run(CircuitBreakerWithFallbackApplication.class, args);
    }

    @GetMapping("/call-external-with-fallback")
    @CircuitBreaker(name = "myExternalService", fallbackMethod = "fallbackMethod")
    public String callExternalService() {
        System.out.println("Attempting external service call...");
        if (random.nextBoolean()) { // Simulate 50% failure rate
            System.out.println("External service failed!");
            throw new RuntimeException("External Service Unavailable!");
        }
        System.out.println("External service call successful!");
        return "External Service Data";
    }

    // The fallback method must have the same return type and can accept a Throwable parameter
    public String fallbackMethod(Throwable t) {
        System.out.println("Fallback method called: " + t.getMessage());
        return "Fallback: Default Data (Service Currently Unavailable)";
    }
}

सर्किट ब्रेकर की जाँच

मान लीजिए कि किसी सर्किट ब्रेकर को failureRateThreshold: 70 और slidingWindowSize: 10 के साथ कॉन्फ़िगर किया गया है। यदि सर्किट CLOSED रहते हुए पिछली 10 लगातार कॉल में से 8 विफल हो जाएँ, तो सर्किट ब्रेकर की तत्काल अगली अवस्था सबसे अधिक संभावित रूप से क्या होगी?

पुनरावलोकन: सर्किट ब्रेकर

हमने सीखा कि Resilience4j के साथ सर्किट ब्रेकर लचीली माइक्रोसर्विस बनाने के लिए कितने महत्वपूर्ण हैं। वे विफल हो रही सेवाओं को बार-बार किए जाने वाले कॉल रोककर श्रृंखलाबद्ध विफलताओं से बचाते हैं।

मुख्य बातें:

  • सर्किट ब्रेकर सेवाओं को अत्यधिक भार और अनुत्तरदायित्व से बचाते हैं।
  • वे CLOSED, OPEN और HALF_OPEN अवस्थाओं में काम करते हैं।
  • किसी सेवा के अनुपलब्ध होने पर फ़ॉलबैक सहज रूप से सीमित कार्यक्षमता उपलब्ध कराते हैं।

अगले पाठ में हम फ़ॉलबैक और टाइमआउट लागू करने जैसे अन्य लचीलापन पैटर्न को अधिक गहराई से समझेंगे।

शुरुआत निःशुल्क

एआई शिक्षक के साथ Java सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
24
पाठ
93

अक्सर पूछे जाने वाले प्रश्न

क्या “Resilience4j के साथ सर्किट ब्रेकर” पाठ निःशुल्क है?

हाँ—“Resilience4j के साथ सर्किट ब्रेकर” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Spring Boot 4 माइक्रोसर्विस और REST API पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Spring Boot 4 माइक्रोसर्विस और REST API पाठ्यक्रम में कुल 3 पाठ शामिल हैं।

“Resilience4j के साथ सर्किट ब्रेकर” में मैं क्या सीखूँगा?

अपनी माइक्रोसर्विस में विफलताओं की श्रृंखला को रोकने के लिए Resilience4j का उपयोग करके सर्किट ब्रेकर प्रतिरूप लागू करें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Spring Boot 4 माइक्रोसर्विस और REST API का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Spring Boot 4 माइक्रोसर्विस और REST API शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Spring Boot 4 माइक्रोसर्विस और REST API शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 3 में से 1वाँ पाठ है।

“Resilience4j के साथ सर्किट ब्रेकर” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Spring Boot 4 माइक्रोसर्विस और REST API पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Spring Boot 4 माइक्रोसर्विस और REST API पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. Resilience4j के साथ सर्किट ब्रेकर
  2. फ़ॉलबैक और टाइमआउट लागू करना
  3. Zipkin के साथ वितरित ट्रेसिंग
← Spring Boot 4 माइक्रोसर्विस और REST API पर वापस जाएँ