Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Tavsiye
Bu içerik, .NET Docs veya çevrimdışı olarak okunabilen ücretsiz indirilebilir bir PDF olarak sağlanan Kapsayıcılı .NET Uygulamaları için .NET Mikro Hizmet Mimarisi adlı e-Kitap'tan bir alıntıdır.
.NET Mikro Hizmetler Mimarisi Kapsayıcılı .NET Uygulamaları için eKitabın kapak küçük resmi
Üstel geri alma ile yeniden denemeler için önerilen yaklaşım, açık kaynak Polly kitaplığı gibi daha gelişmiş .NET kitaplıklarından yararlanmaktır.
Polly, dayanıklılık ve geçici hata işleme özellikleri sağlayan bir .NET kitaplığıdır. Polly ilkelerini, Yeniden Deneme, Devre Kesici, Bölme Yalıtımı, Zaman Aşımı ve Geri Dönüş gibi uygulayarak bu yetenekleri gerçekleştirebilirsiniz. Polly.NET Framework 4.x ve .NET Standard 1.0, 1.1 ve 2.0'ı (.NET Core ve üzerini destekler) hedefler.
Aşağıdaki adımlarda, önceki bölümde açıklanan Polly'in IHttpClientFactory
'e entegre edilmiş http yeniden denemelerini nasıl kullanabileceğiniz gösterilmektedir.
.NET paketlerini yükleme
İlk olarak paketi yüklemeniz Microsoft.Extensions.Http.Polly
gerekir.
- Visual Studio ile yükleme
- dotnet CLI ile yükleme
- nuget.exe CLI ile yükleme
- Paket Yöneticisi Konsolu (PowerShell) ile yükleme
.NET 8 paketlerine başvurma
IHttpClientFactory
.NET Core 2.1'den itibaren kullanılabilir ancak projenizde NuGet'ten en son .NET 8 paketlerini kullanmanızı öneririz. Genellikle uzantı paketine Microsoft.Extensions.Http.Polly
de başvurmanız gerekir.
Uygulama başlangıcında Polly'nin Yeniden Deneme ilkesiyle istemci yapılandırma
AddPolicyHandler() yöntemi, kullanacağınız nesnelere HttpClient
ilke ekleyen yöntemdir. Bu durumda, üstel geri çekilme ile HTTP Yeniden Denemeleri için bir Polly politikası ekleniyor.
Daha modüler bir yaklaşıma sahip olmak için Http Yeniden Deneme İlkesi, aşağıdaki kodda gösterildiği gibi Program.cs dosyasındaki ayrı bir yöntemde tanımlanabilir:
static IAsyncPolicy<HttpResponseMessage> GetRetryPolicy()
{
return HttpPolicyExtensions
.HandleTransientHttpError()
.OrResult(msg => msg.StatusCode == System.Net.HttpStatusCode.NotFound)
.WaitAndRetryAsync(6, retryAttempt => TimeSpan.FromSeconds(Math.Pow(2,
retryAttempt)));
}
Önceki bölümlerde gösterildiği gibi, standart Program.cs uygulama yapılandırmanızda adlandırılmış veya yazılan bir istemci HttpClient yapılandırması tanımlamanız gerekir. Şimdi, üstel geri çekilmeli HTTP yeniden deneme ilkelerini belirten kademeli kodu aşağıdaki gibi ekleyin.
// Program.cs
builder.Services.AddHttpClient<IBasketService, BasketService>()
.SetHandlerLifetime(TimeSpan.FromMinutes(5)) //Set lifetime to five minutes
.AddPolicyHandler(GetRetryPolicy());
Polly ile yeniden deneme sayısı, üstel geri alma yapılandırması ve hatayı günlüğe kaydetme gibi bir HTTP özel durumu olduğunda gerçekleştirebileceğiniz eylemlerle bir Yeniden Deneme ilkesi tanımlayabilirsiniz. Bu durumda, ilke iki saniyeden başlayarak üstel bir yeniden deneme ile altı kez deneyecek şekilde yapılandırılır.
Yeniden deneme ilkesine bir titreme stratejisi ekleyin
Düzenli bir Yeniden Deneme ilkesi, yüksek eşzamanlılık ve ölçeklenebilirlik durumlarında ve yüksek çekişme durumunda sisteminizi etkileyebilir. Kısmi kesintilerde birçok istemciden gelen benzer yeniden denemelerin yoğunluklarının üstesinden gelmek için iyi bir geçici çözüm, yeniden deneme algoritmasına/ilkesine rastgelelik stratejisi eklemektir. Bu strateji, uçtan uca sistemin genel performansını geliştirebilir. Polly: Jitter ile yeniden deneme bölümünde önerildiği gibi, üstel geri çekilmede iyi denetlenen ortanca başlangıç yeniden deneme gecikmesi ile sorunsuz ve eşit dağıtılmış yeniden deneme aralıklarıyla iyi bir rastgele gecikme stratejisi uygulanabilir. Bu yaklaşım, sorun ortaya çıktığında ani artışların yayılmasına yardımcı olur. İlke aşağıdaki örnekte gösterilmiştir:
var delay = Backoff.DecorrelatedJitterBackoffV2(medianFirstRetryDelay: TimeSpan.FromSeconds(1), retryCount: 5);
var retryPolicy = Policy
.Handle<FooException>()
.WaitAndRetryAsync(delay);
Ek kaynaklar
Yeniden deneme düzenihttps://learn.microsoft.com/azure/architecture/patterns/retry
Polly ve IHttpClientFactoryhttps://github.com/App-vNext/Polly/wiki/Polly-and-HttpClientFactory
Polly (.NET geçici hata yönetimi ve dayanıklılık kitaplığı)https://github.com/App-vNext/Polly
Polly: Jitter ile yeniden denemehttps://github.com/App-vNext/Polly/wiki/Retry-with-jitter
Marc Brooker. Jitter: Rastgelelik ile İşleri Daha İyi Hale Getirme https://brooker.co.za/blog/2015/03/21/backoff.html