Polly C# (.NET) पूरी गाइड: उदाहरणों के साथ हिंदी में

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Polly क्या है और इसकी ज़रूरत क्यों है?

Polly एक शक्तिशाली और लचीली .NET (C#, F#, VB.NET) लाइब्रेरी है, जो अस्थायी खराबियों (temporary failures) को संभालने और एप्लिकेशन को फॉल्ट-टॉलरेंट (fault-tolerant) बनाने के लिए बनाई गई है। यह रिट्री (Retry), सर्किट ब्रेकर (Circuit Breaker), टाइमआउट (Timeout), बल्कहेड आइसोलेशन (Bulkhead Isolation) और कैशिंग (Cache) जैसे रेज़िलिएंस पैटर्न (resilience patterns) को लागू करती है।

आज के माइक्रोसर्विस आर्किटेक्चर और क्लाउड कंप्यूटिंग के दौर में, एप्लिकेशन लगातार बाहरी संसाधनों जैसे डेटाबेस, वेब सर्विसेज़ और API से जुड़ते हैं। ये कनेक्शन हमेशा भरोसेमंद नहीं होते—नेटवर्क एरर, सर्विस का अस्थायी रूप से डाउन होना, या रिक्वेस्ट लिमिट पार होना आम बात है। Polly आपको बिना बड़े try-catch ब्लॉक लिखे इन स्थितियों को आसानी से संभालने की सुविधा देती है।

मुख्य उपयोग के मामले:

  • Retry (दोबारा प्रयास): अस्थायी एरर आने पर ऑपरेशन को ऑटोमैटिक रूप से दोहराना।
  • Circuit Breaker (सर्किट ब्रेकर): अगर सर्विस बार-बार एरर दे रही है, तो कॉल करना बंद कर दें ताकि उसे रिकवर होने का समय मिले।
  • Timeout (टाइमआउट): ऑपरेशन के लिए समय सीमा तय करना।
  • Bulkhead (बल्कहेड): एक साथ चलने वाले ऑपरेशनों की संख्या सीमित करना, ताकि एक "खराब" ऑपरेशन पूरे थ्रेड पूल को ब्लॉक न करे।
  • Cache (कैश): सफल ऑपरेशनों के परिणामों को कैश करना।
  • Fallback (वैकल्पिक विकल्प): विफलता की स्थिति में कोई वैकल्पिक कार्रवाई करना।

Polly की इंस्टॉलेशन

Polly NuGet के ज़रिए उपलब्ध है—जो .NET का पैकेज मैनेजर है। इसे कई तरीकों से इंस्टॉल किया जा सकता है:

Package Manager Console (Visual Studio) के ज़रिए

Install-Package Polly

.NET CLI के ज़रिए

dotnet add package Polly

PackageReference (.csproj फ़ाइल में) के ज़रिए

<PackageReference Include="Polly" Version="8.2.0" />

इंस्टॉल करने के बाद अपने कोड में using डायरेक्टिव जोड़ें:

using Polly;
using Polly.Retry;
using Polly.CircuitBreaker;
using Polly.Timeout;
using Polly.Bulkhead;
using Polly.Caching;
using Polly.Fallback;
using Polly.Wrap;

कोड उदाहरण के साथ त्वरित शुरुआत

एक सरल उदाहरण देखते हैं: हमारे पास एक मेथड है जो बाहरी API को कॉल करता है, और हम चाहते हैं कि अगर कोई एक्सेप्शन आता है तो 3 बार दोबारा प्रयास किया जाए।

using System;
using System.Net.Http;
using System.Threading.Tasks;
using Polly;
using Polly.Retry;

public class ApiClient
{
    private readonly HttpClient _httpClient;
    private readonly AsyncRetryPolicy _retryPolicy;

    public ApiClient()
    {
        _httpClient = new HttpClient();
        
        // रिट्री पॉलिसी बनाएं
        _retryPolicy = Policy
            .Handle<HttpRequestException>() // किन एक्सेप्शन को हैंडल करना है
            .Or<TimeoutException>()          // या टाइमआउट
            .WaitAndRetryAsync(
                3,                           // प्रयासों की संख्या
                retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt)), // एक्सपोनेंशियल देरी
                onRetry: (exception, timeSpan, retryCount, context) =>
                {
                    Console.WriteLine($"प्रयास {retryCount} विफल। {timeSpan.Seconds} सेकंड में दोबारा प्रयास। एरर: {exception.Message}");
                }
            );
    }

    public async Task<string> GetDataAsync(string url)
    {
        // पॉलिसी का उपयोग करके रिक्वेस्ट करें
        return await _retryPolicy.ExecuteAsync(async () =>
        {
            var response = await _httpClient.GetAsync(url);
            response.EnsureSuccessStatusCode();
            return await response.Content.ReadAsStringAsync();
        });
    }
}

// उपयोग
public class Program
{
    public static async Task Main()
    {
        var client = new ApiClient();
        try
        {                    

अनुशंसाएँ