Uygulama dayanıklılığını uygulama

Tamamlandı

.NET'in dayanıklılık özellikleri Polly projesi üzerine oluşturulur ve Microsoft.Extensionsaracılığıyla kullanılabilir hale getirilir. Uygulamanıza tek bir kod satırı ekleyerek mantıklı varsayılanları kullanan standart bir dayanıklılık stratejisi ekleyebilirsiniz.

Uygulamanıza dayanıklılık ekleme

Tek tek hizmetler arasında HTTP isteklerini kullanarak mikro hizmet mimarisi kullanılarak oluşturulmuş bir uygulamaya dayanıklılık eklemek için şu adımları izleyin:

  1. Microsoft.Extensions.Http.Resilience paketini projenize ekleyin.
  2. HttpClient hizmet çağrılarınıza dayanıklılık işleyicisi ekleyin.
  3. Dayanıklılık stratejisini yapılandırın.

NuGet paketini projenize ekleme

Dayanıklılık NuGet paketini eklemek için aşağıdaki komutu çalıştırın:

dotnet add package Microsoft.Extensions.Http.Resilience

Uygulamalar proje klasöründe terminalden bu komutu çalıştırmak, paket başvurusunu proje dosyasına ekler.

Ardından uygulamanızın başlangıç sınıfına aşağıdaki using deyimini ekleyin:

using Microsoft.Extensions.Http.Resilience;

Dayanıklılık stratejisi ekleme

Artık HttpClient hizmetinize standart bir dayanıklılık stratejisi ekleyebilirsiniz. .NET, bir dizi stratejiyi birleştiren bu hazır yapılandırmayı sağlar.

Standart Dayanıklılık İşleyicisi'nde yer alan stratejileri gösteren diyagram. Genel zaman aşımı, yeniden deneme, bölme, devre kesici ve deneme zaman aşımı stratejilerini içerir.

İstek işleyicisi, bu stratejilerin her birini soldan sağa doğru sırasıyla ilerler:

  • Toplam istek zaman aşımı stratejisi: Bu, isteğin alabileceği toplam süreyi ayarlar. Bunu diğer tüm stratejiler için üst zaman sınırını ayarlamak olarak düşünebilirsiniz.
  • Yeniden deneme stratejisi: Bu strateji, yeniden deneme sayısı, geri çekilme ve dalgalanma seçeneklerini kontrol eder. Bu seçenekler önceki stratejide ayarlanan toplam zaman aşımını aşamaz.
  • Devre kesici stratejisi: Hata oranı eşiği aşarsa bu strateji devreyi açar.
  • Deneme zaman aşımı stratejisi: Bu strateji her istek için bir zaman aşımı ayarlar. İstek bu süreden daha uzun sürerse, bir istisna fırlatılır.

Bu uzantı yöntemini ekleyerek bu standart stratejiyi tüm varsayılan değerlerle ekleyebilirsiniz:

.AddStandardResilienceHandler();

Örneğin, bir WebApplicationbildirdiyseniz ve HttpClient hizmetine dayanıklılık stratejisi eklemek istiyorsanız şu kodu kullanın:

builder.Services.AddHttpClient<ServiceBeingCalled>(httpClient =>
{
    httpClient.BaseAddress = new Uri("https://service.endpoint/");
}).AddStandardResilienceHandler();

Yukarıdaki kodun ilk satırı, HTTPClient'a standart bir dayanıklılık işleyicisi ekler. Bu, yeniden deneme ve devre kesici stratejileri için tüm varsayılan ayarları kullanır.

Dayanıklılık stratejisini yapılandırma

Yeni seçenekler belirterek stratejilerden herhangi birinin varsayılan değerlerini değiştirebilirsiniz, örneğin:

.AddStandardResilienceHandler( options => 
{  
    options.RetryOptions.RetryCount = 10;
    options.RetryOptions.BaseDelay = TimeSpan.FromSeconds(1);
});

Bu kod, yeniden deneme stratejisi varsayılanlarını, en fazla 10 yeniden deneme sayısına sahip olacak şekilde değiştirmek, doğrusal geri alma kullanmak ve 1 saniyelik bir temel gecikme uygulamak için değiştirir.

Seçtiğiniz seçeneklerin birbiriyle uyumlu olması gerekir. Örneğin, toplam süre varsayılan değeri 30 saniye olarak kalırsa, yeniden deneme seçenekleri bir özel duruma neden olur. Üstel geri alma ayarı toplam 10 yeniden denemeyi tamamlama süresinin 2.046 saniye olmasını sağladığından bu bir hatadır. Bu bir çalışma zamanı özel durumudur, derleme zamanı hatası değildir.

Aşağıdaki tabloda, stratejilerin her biri için kullanılabilen seçenekler listelenmiştir.

Toplam istek zaman aşımı seçenekleri Açıklama
Toplam Zaman Aşımı İsteğin sürebileceği toplam süre. Varsayılan değer 30 saniyedir.
OnTimeout İstek zaman aşımına uğradığında çağrılan bir geri çağırma fonksiyonu. Varsayılan değer null'dur.

Yeniden deneme seçenekleri Açıklama
Yeniden Deneme Sayısı Yeniden deneme sayısı üst sınırı. Varsayılan değer 3'dür.
Backoff Türü Kullanılacak geri çekilme türü. Doğrusal ve üstel arasında seçim yapabilirsiniz. Varsayılan değer üsteldir.
UseJitter Geri çekilme süresine dalgalanma eklenip eklenmeyeceği. Jitter, yükteki ani artışları azaltmaya yardımcı olmak için gecikmeye rastgelelik katar. Varsayılan değer true'dur.
BaseDelay Yeniden denemeler arasındaki gecikme. Varsayılan değer 2 saniyedir.

Devre kesici seçenekleri Açıklama
Mola Süresi Devre kesme süresi. Varsayılan değer 5 saniyedir.
Başarısızlık Oranı Başarısız isteklerin bağlantı hattını açacak başarılı isteklere oranı. Varsayılan değer 0,1'dir.
Örnekleme Süresi Hata oranının hesaplandığı zaman dilimi. Varsayılan değer 30 saniyedir.
OnClosed Devre kapatıldığında çağrılan bir geri çağırma işlevi. Varsayılan değer null'tır.
YarıAçıkta Devre yarı açık olduğunda çağrılan bir geri çağırma işlevi. Varsayılan değer null'tır.
Açıldığında Devre açıldığında çağrılan bir geri çağırma işlevi. Varsayılan değer null'tır.

Deneme zaman aşımı seçenekleri Açıklama
Zaman aşımı İsteğin alabileceği süre miktarı. Varsayılan değer 2 saniyedir.
OnTimeout İstek zaman aşımına uğradığında çağrılan bir geri çağırma fonksiyonu. Varsayılan değer null'dur.

Dayanıklılık stratejisi kullanarak bir uygulamadaki olayların akışını gösteren sıralı diyagram.

Sıralı diyagram, stratejilerin her birinin standart dayanıklılık stratejisinde birlikte nasıl çalıştığını gösterir. İlk olarak, toplam zaman aşımı stratejisi bir isteğin ne kadar sürebileceğine ilişkin sınırlayıcı faktörü denetler. Yeniden deneme stratejisi, toplam zaman aşımı içinde tamamlanacak en fazla yeniden deneme sayısına sahip olacak şekilde ayarlanmalıdır. Devre kesici stratejisi, hata oranı ayarlanan eşiği aşarsa devreyi açar. Deneme zaman aşımı stratejisi her istek için bir zaman aşımı ayarlar. İstek bu süreden daha uzun sürerse, bir istisna fırlatılır.