IRONSOFTWAREHOME
GELIŞTIRICI GÜNCELLEMELERI

.NET Core Polly (Geliştiriciler İçin Nasıl Çalışır)

Jacob Mellor, Teknoloji Direktörü @ Team Iron
Jacob Mellor
Updated: 28 Temmuz 2025

Polly, geliştiricilerin tekrar deneme politikası, devre kesiciler, zaman aşımı, Bulkhead İzolasyonu politikası ve geri dönüş gibi esneklik politikalarını ifade etmelerine olanak tanıyan bir .NET dayanıklılık stratejileri ve geçici hata işleme kütüphanesidir. Polly, ASP.NET Core'u hedef alır ve bu da onu .NET Core dayanıklılığı için hayati bir araç yapar. Polly, çoklu eşzamanlı istekleri başarılı yanıtlarla işleyebilmek için iş parçacığı güvenlidir.

Bu ders Polly, ve IronPDF ile bir ASP.NET Core uygulamasında kullanımına dair daha fazla ayrıntı sağlayacaktır. Polly'nin her bir yönüne derinlemesine dalacağız, devre kesici modelinin mekaniğini açıklayacağız, Bulkhead izolasyonu ve zaman aşımları üzerinde duracağız ve belirli istisnaları veya başarısız olan hizmetlerin yanıtlarını kontrollü ve iş parçacığı güvenli bir şekilde nasıl yöneteceğimizi göstereceğiz.

Polly Politikaları

Geçici hatalar genellikle uygulamanız bir web hizmetine HTTP isteği, veritabanı veya diğer dış kaynaklar üzerinden bağlanmaya çalıştığında meydana gelir. Bu hatalar, ağda meydana gelen sorunlar, geçici bağlantı problemleri veya zaman aşımı gibi kısa sürelidir ve genellikle kısa bir süre sonra kendiliğinden düzelir.

Polly, bu geçici hataları farklı stratejiler uygulayarak yönetir ve Tekrar Deneme Politikası, gelişmiş Devre Kesici Politikası, Zaman Aşımı Politikası, Geri Dönüş Politikası ve Bulkhead İzolasyon Politikası gibi politikalar ifade eder.

Tekrar Deneme Politikası

Tekrar Deneme Politikası, tekrar deneme mantığını kullanarak başarısız eşzamanlı istekleri otomatik olarak tekrar dener. Bu, sonsuza kadar tekrar deneme yapmak veya belirli bir sayıda otomatik tekrar denemeler yapmak için yapılandırılabilir, ve tekrar denemeler arasında belirli bir zaman aralığı beklemek veya üstel gecikme sürelerini kullanmak mümkün.

Devre Kesici

Devre Kesici politikası, bir önceden ayarlanmış başarısız istek eşiği sonrasında belirli bir hizmeti denemek için bir iptal belirteci sisteminize yetenek tanır. Devre Kesici stratejisi, kaos mühendisliği veya bir gemide su geçişine zarar vermek için su sızdırmaz kapıları kapatmak benzerindedir: bir hata bütün gemiyi batırmayacaktır.

Zaman Aşımı Politikası

Zaman aşımı politikası, belirli bir .NET dayanıklılık kod parçasının maksimum çalışma süresini uygular. İki çeşidi vardır: iyimser zaman aşımı ve kötümser zaman aşımı.

Geri Dönüş Politikası

Geri dönüş politikası, bir arıza durumunda ikame bir değer veya davranış sağlamak için kullanılır. Bu tür politikalar, bir işlevsizlik yaşayan hizmetin tüm süreci durdurmaması gerektiği durumlarda faydalı olabilir.

Bulkhead İzolasyonu

Bulkhead izolasyonu, belirli bir işlem için yapılabilecek eşzamanlı istek sayısını sınırlamak için kullanılır, bu da soket tükenmesi potansiyelini sınırlayarak kontrol edilen sayıda yürütme yuvası bakımını sağlar.

Önbellek Politikası

Önbellek politikası, bir yürütmenin başarılı yanıtını önbelleğe alır, böylece aynı yürütme tekrar çağrıldığında, Polly dağıtılmış önbellek değerini geri döndürebilir.

Politika Sarmalama

Bize birçok politikayı bir araya getirerek tek bir birim olarak çalışmalarını sağlar.

Politikaları Oluşturma ve Yapılandırma

Tekrar Deneme Politikası

Bir tekrar deneme politikası basittir: belirli bir istisna veya hata oluştuğunda, Polly alttaki delegasyonu tekrar yürütmeye çalışır. Kaç kez tekrar denenmesi gerektiğini, tekrar denemeler arasındaki zaman aralığını veya bir üstel gecikme stratejisi kullanıp kullanmayacağınızı tanımlayabilirsiniz, bu durumda sonsuza kadar tekrar deneyecektir. İşte bir örnek:

// Retry policy for handling HttpRequestException with exponential back-off
var retryPolicy = Policy
    .Handle<HttpRequestException>()
    .WaitAndRetryAsync(3, retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt)), 
    (exception, timeSpan, retryCount, context) =>
    {
        // This is the OnRetry delegate, where you can log or monitor failed requests
        Console.WriteLine($"Retry {retryCount} after {timeSpan}. Exception: {exception.Message}");
    });

Devre Kesici Politikası

Devre Kesici politikası, Polly kütüphanesinin hataları izlemesine olanak tanır ve eğer belirli bir süre içinde ayarlanmış bir eşikten daha fazla hata varsa, devre "kırılır" ve daha fazla istek belirtilen süre boyunca engellenir. Bu, 'açık' durum olarak adlandırılır. Bu sürenin ardından, devre 'yarım açık' duruma girer, belirli bir hizmetin sağlığını kontrol etmek için bir miktar trafik alır. Bu istekler başarılı olur ve hata meydana gelmezse, devre kapanır; aksi takdirde, tekrar açılır.

// Circuit breaker policy to handle failing requests with open and half-open states
var circuitBreakerPolicy = Policy
    .Handle<HttpRequestException>()
    .CircuitBreakerAsync(5, TimeSpan.FromMinutes(1));

Zaman Aşımı Politikası

Zaman aşımı politikaları, bir hizmetin makul bir zaman dilimi içinde yanıt vermediği senaryoları ele alır. Polly, İyimser ve Kötümser olmak üzere iki tür zaman aşımı sunar. İyimser bir zaman aşımı, ayrı bir iş parçacığında çalışır ve temel işlemi CancellationToken aracılığıyla iptal eder. Bir kötümser zaman aşımı, işlem tamamlanana veya zaman aşımı süresi dolana kadar ana iş parçacığını engeller.

// Timeout policy with a 30-second optimistic timeout
var timeoutPolicy = Policy.TimeoutAsync(30); // 30 seconds

Bulkhead İzolasyonu

Bulkhead İzolasyonu, belirli bir hizmete karşı yapılan eşzamanlı eylemler sayısını sınırlamak için kullanılmaktadır. Hataları izole etmek ve yayılmalarını önlemek için bir yol sağlar. Ayrıca, bağımlılıklarımıza koyduğumuz yükü sınırlar.

// Bulkhead isolation policy to limit concurrency and queue length
var bulkheadIsolationPolicy = Policy.BulkheadAsync(10, 20); // 10 concurrent actions, 20 queue slots

Geri Dönüş Politikası

Tüm başka şeyler başarısız olduğunda bir varsayılan davranış veya ikame değer sağlama gereği duyduğunuzda geri dönüş politikaları faydalıdır.

// Fallback policy to provide a default result on failure
var fallbackPolicy = Policy
    .Handle<Exception>()
    .FallbackAsync<FallbackResult>(
        FallbackResult.SomethingWentWrong, 
        (exception, context) => 
        {
            Console.WriteLine($"Fallback triggered due to: {exception.Message}");
            return Task.CompletedTask;
        });

Politikaları Sarmalama

Birden fazla politika, bir PolicyWrap kullanılarak esnek bir şekilde birleştirilebilir:

// Combining multiple policies using PolicyWrap
var policyWrap = Policy.WrapAsync(fallbackPolicy, retryPolicy, circuitBreakerPolicy, timeoutPolicy, bulkheadIsolationPolicy);

Başlarken

IronPDF ile Polly kullanmaya başlamak için Visual Studio'nun yüklü olduğundan emin olun ve .NET Core'da yeni bir Konsol Uygulama projesi oluşturun. Visual Studio'da NuGet Paket Yöneticisi Konsolunu açın ve Polly ve IronPDF paketlerini yükleyin:

PM > Install-Package Polly

PM > Install-Package IronPdf

IronPDF ile Polly Kullanarak URL'yi PDF'ye Dönüştürme

IronPDF'nin öne çıkan özelliklerinden biri, mizanpajlar ve stillerin bozulmadan kalmasını sağlayarak HTML'den PDF oluşturma yeteneğidir. Bu işlev, raporlar, faturalar ve dökümantasyon için mükemmeldir. HTML dosyalarını, URL'leri ve HTML dizgelerini PDF'ye dönüştürmeyi destekler.

using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}

URL'yi PDF'ye dönüştürmek için Polly ile IronPDF kullanımı örneğine bir göz atalım. Zaman zaman geçici hatalar nedeniyle başarısız olan bir web hizmetine sahip olduğumuzu ve bu hataları Polly kullanarak zarif bir şekilde yönetmek istediğimizi varsayalım.

İlk olarak, gerekli ad alanlarını Program.cs dosyamızda içe aktaralım:

using System;
using System.Threading.Tasks;
using Polly;
using Polly.Wrap;
using IronPdf;

Ardından politikalarımızı tanımlayacağız. Bu örnekte, hataları yönetmek için bir tekrar deneme ve bir devre kesici politikalarını bir araya kullanacağız:

// Retry policy with exponential backoff
var retryPolicy = Policy
    .Handle<Exception>()
    .WaitAndRetryAsync(3, i => TimeSpan.FromSeconds(2 * i));

// Circuit breaker policy to block requests after consecutive failures
var circuitBreakerPolicy = Policy
    .Handle<Exception>()
    .CircuitBreakerAsync(2, TimeSpan.FromSeconds(30));

retryPolicy, üstel bir geri çekilme stratejisiyle başarısız olan isteği üç kez deneyecek, denemeler arasında 2 saniye, 4 saniye ve 8 saniye bekler. circuitBreakerPolicy, 30 saniyelik bir zaman aralığında ardışık iki başarısızlık meydana gelirse devreyi açacaktır.

Şimdi, bir URL'yi PDF'ye dönüştürmek için IronPDF kodumuzu tanımlayalım:

var htmlToPdf = new ChromePdfRenderer();
var pdfBytes = await retryPolicy
    .WrapAsync(circuitBreakerPolicy)
    .ExecuteAsync(async () =>
    {
        Console.WriteLine("Attempting to convert URL to PDF...");
        var result = await htmlToPdf.RenderUrlAsPdfAsync("https://example.com");
        Console.WriteLine("Conversion successful!");
        return result;
    });

pdfBytes.SaveAs("output.pdf");

Yukarıdaki örnek kodda, retryPolicy ve circuitBreakerPolicy'yi WrapAsync yöntemi kullanarak sarıyoruz. Bu bize yeni isteklere ardışık olarak birden fazla politikayı uygulama imkanı verir. ExecuteAsync yöntemi, bu kodda IronPDF'nin RenderUrlAsPdfAsync metodunu içeren sağlanan delegeyi çalıştırır.

Polly politikaları uygulayarak, kodumuzun geçici hatalara karşı dirençli olduğunu sağlar. Bir istek başarısız olursa, Polly tekrar deneme politikasına göre otomatik olarak tekrar deneyecektir. Arka arkaya başarısızlıkların sayısı önceden ayarlanan eşiği aşarsa, devre kesici politika devreyi açacak ve belirli bir süre boyunca daha fazla istekleri engelleyecektir.

Polly Politikalarının Test Senaryoları

Polly politikalarımızın etkinliğini test etmek için bazı başarısız istekleri simüle edelim. URL'yi mevcut olmayan bir uç nokta olarak değiştirin ve birkaç test durumu ekleyin:

var testUrls = new[]
{
    "https://ironpdf.com",
    "https://notexistingdomain.com/",
    "http://httpbin.org/delay/120"
};

foreach (var url in testUrls)
{
    try
    {
        var pdfBytes = await retryPolicy
            .WrapAsync(circuitBreakerPolicy)
            .ExecuteAsync(() => htmlToPdf.RenderUrlAsPdfAsync(url));

        pdfBytes.SaveAs($"{Guid.NewGuid()}.pdf");
        Console.WriteLine($"Successfully converted {url} to PDF.");
    }
    catch (Exception ex)
    {
        Console.WriteLine($"Failed to convert {url} to PDF: {ex.Message}");
    }
}

Yukarıdaki kodda, bir dizi test URL'si üzerinde yineler ve her birini PDF'ye dönüştürmeye çalışırız. Bir istek başarısız olursa, istisna yakalanacak ve uygun bir mesaj konsolda görüntülenecektir.

.NET Core Polly (Geliştiriciler İçin Nasıl Çalışır): Şekil 1 - URL'den PDF'ye Çıkış

Sonuç

Polly, .NET Core uygulamalarında dayanıklılık ve geçici hata yönetimi uygulamak için güçlü ve esnek bir kütüphanedir. Polikalar gibi tekrar deneme ve devre kesici gibi politikaları birleştirerek, geliştiriciler arızaları zarif bir şekilde yöneten sağlam ve hataya dayanıklı sistemler inşa edebilirler.

Bu derste, Polly ile IronPDF kullanarak bir URL'yi PDF'ye dönüştürmeyi öğrendik. Tekrar deneme ve devre kesici gibi Polly politikalarını nasıl tanımlayacağımızı ve uygulayacağımızı öğrendik. Ayrıca, farklı URL'lerle politikalarımızı test ettik. Ayrıca, HTML'yi PDF'ye dönüştürmek için de yapabiliriz.

IronPDF, projelerinizde yeteneklerini kullanmanıza olanak tanıyan ücretsiz bir deneme sunar ve lisanslar rekabetçi fiyatlarla başlamaktadır.

Jacob Mellor, Teknoloji Direktörü @ Team Iron
Teknoloji Direktörü

Jacob Mellor, Iron Software'de Baş Teknoloji Yöneticisidir ve C# PDF teknolojisinde öncü bir mühendisdir. Iron Software'ın ana kod tabanının ilk geliştiricisi olarak, CEO Cameron Rimington ile birlikte şirketin ürün mimarisini 50'den fazla kişilik bir şirkete dönüştürmüştür ve NASA, Tesla ve dünya genelindeki devlet kurumlarına hizmet etmektedir.

...
Daha Fazla Oku

İlgili Makaleler

Key in blue circle

Ücretsiz 30 günlük Deneme Anahtarınızı anında edinin.

Your trial license will be sent to your email address

Herhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.

bullet_checkedKredi kartı veya hesap oluşturma gerektirmezHerhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Ücretsiz Canlı Demo rezervasyonu yapın
Booking Badge

Dünya Çapında Milyonlarca Mühendisin Güvendiği

Iron Software müşteri logoları
Bağımsız Danışmanlık Alın
Aşağıdaki formu doldurun veya sales@ironsoftware.com adresine e-posta gönderin
Bilgileriniz daima gizli kalacaktır.
Dünya Çapında Milyonlarca Mühendisin Güvendiği
Iron Software müşteri logoları
Ücretsiz 30 Günlük Deneme Anahtarınızı anında alın.
Kredi kartı veya hesap oluşturma gerektirmez