Ereignisse
17. März, 21 Uhr - 21. März, 10 Uhr
Nehmen Sie an der Meetup-Serie teil, um skalierbare KI-Lösungen basierend auf realen Anwendungsfällen mit Mitentwicklern und Experten zu erstellen.
Jetzt registrierenDieser Browser wird nicht mehr unterstützt.
Führen Sie ein Upgrade auf Microsoft Edge durch, um die neuesten Features, Sicherheitsupdates und den technischen Support zu nutzen.
Tipp
Diese Inhalte sind ein Auszug aus dem eBook „.NET Microservices Architecture for Containerized .NET Applications“, verfügbar unter .NET Docs oder als kostenlos herunterladbare PDF-Datei, die offline gelesen werden kann.
Für Wiederholungen mit exponentiellem Backoff wird empfohlen, fortgeschrittenere .NET-Bibliotheken wie die Open Source-Bibliothek Polly zu verwenden.
Polly ist eine .NET-Bibliothek, die Funktionen für die Flexibilität und die Behandlung von vorübergehenden Fehlern bereitstellt. Sie können diese Funktionen implementieren, indem Sie Polly-Richtlinien wie „Retry“, „Circuit Breaker“, „Bulkhead Isolation“, „Timeout“, und „Fallback“ anwenden. Polly unterstützt .NET Framework 4.x und .NET Standard 1.0, 1.1 und 2.0 (unterstützt .NET Core und höher).
Die folgenden Schritte veranschaulichen, wie Sie HTTP-Wiederholungen mit Polly in IHttpClientFactory
verwenden können. Die Integration von Polly wird im vorherigen Abschnitt erläutert.
Installieren von .NET-Paketen
Zuerst müssen Sie das Microsoft.Extensions.Http.Polly
-Paket installieren.
Verweisen auf die .NET 8-Pakete
IHttpClientFactory
ist seit .NET Core 2.1 verfügbar. Wir empfehlen jedoch die Verwendung der neuesten .NET 8-Pakete auf NuGet in Ihrem Projekt. In der Regel müssen Sie auch auf das Erweiterungspaket Microsoft.Extensions.Http.Polly
verweisen.
Konfigurieren eines Clients mit der Wiederholungsrichtlinie von Polly beim App-Start
Durch die Methode AddPolicyHandler() werden Richtlinien zu HttpClient
-Objekten hinzugefügt, die Sie verwenden werden. In diesem Fall wird eine Richtlinie von Polly für HTTP-Wiederholungen mit exponentiellem Backoff hinzugefügt.
Für einen modulareren Ansatz kann die HTTP-Wiederholungsrichtlinie in einer separaten Methode innerhalb der Program.cs-Datei definiert werden. Dies wird im folgenden Code veranschaulicht:
static IAsyncPolicy<HttpResponseMessage> GetRetryPolicy()
{
return HttpPolicyExtensions
.HandleTransientHttpError()
.OrResult(msg => msg.StatusCode == System.Net.HttpStatusCode.NotFound)
.WaitAndRetryAsync(6, retryAttempt => TimeSpan.FromSeconds(Math.Pow(2,
retryAttempt)));
}
Wie in den vorherigen Abschnitten gezeigt, müssen Sie eine HttpClient-Konfiguration mit benanntem oder typisierten Client in Ihrer standardmäßigen Program.cs-App-Konfiguration definieren. Jetzt fügen Sie wie folgt inkrementellen Code hinzu, der die Richtlinie für die HTTP-Wiederholungen mit exponentiellem Backoff angibt:
// Program.cs
builder.Services.AddHttpClient<IBasketService, BasketService>()
.SetHandlerLifetime(TimeSpan.FromMinutes(5)) //Set lifetime to five minutes
.AddPolicyHandler(GetRetryPolicy());
Mit Polly können Sie eine Wiederholungsrichtlinie definieren, die die Anzahl von Wiederholungen, die Konfiguration des exponentiellen Backoffs und die Aktionen enthält, die ausgeführt werden, wenn eine HTTP-Ausnahme ausgelöst wird, z.B. die Protokollierung des Fehlers. In diesem Fall ist die Richtlinie dafür konfiguriert, sechs Versuche mit einer exponentiellen Wiederholung durchzuführen, die bei zwei Sekunden beginnt.
Eine reguläre Wiederholungsrichtlinie kann Ihr System negativ beeinflussen, falls hohe Parallelität, hohe Skalierbarkeit und ein hohes Konfliktpotenzial vorhanden sind. Um mit Spitzenlasten umgehen zu können, die bei ähnlichen Wiederholungsanforderungen von vielen Clients bei einem Teilausfall auftreten, empfiehlt es sich als Notlösung, den Wiederholungsalgorithmus oder die Wiederholungsrichtlinie um eine Jitterstrategie zu ergänzen. Diese Strategie kann die Gesamtleistung des End-to-End-Systems verbessern. Wie in Polly: Retry with Jitter empfohlen, lässt sich eine gute Jitterstrategie durch geglättete und gleichmäßig verteilte Wiederholungsintervalle implementieren, die mit einer gut kontrollierten anfänglichen Median-Wiederholungsverzögerung auf ein exponentielles Backoff angewendet werden. Dieser Ansatz hilft dabei, Spitzen zu verteilen, wenn das Problem auftritt. Das Prinzip wird im folgenden Beispiel dargestellt:
var delay = Backoff.DecorrelatedJitterBackoffV2(medianFirstRetryDelay: TimeSpan.FromSeconds(1), retryCount: 5);
var retryPolicy = Policy
.Handle<FooException>()
.WaitAndRetryAsync(delay);
Wiederholungsmusterhttps://learn.microsoft.com/azure/architecture/patterns/retry
Polly und IHttpClientFactoryhttps://github.com/App-vNext/Polly/wiki/Polly-and-HttpClientFactory
Polly (.NET-Bibliothek zur Gewährleistung von Resilienz und zur Behandlung temporärer Fehler)https://github.com/App-vNext/Polly
Polly: Wiederholungsversuch mit Jitterhttps://github.com/App-vNext/Polly/wiki/Retry-with-jitter
Marc Brooker. Jitter: Making Things Better With Randomness (Jitter: Dinge durch Zufall verbessern) https://brooker.co.za/blog/2015/03/21/backoff.html
Feedback zu .NET
.NET ist ein Open Source-Projekt. Wählen Sie einen Link aus, um Feedback zu geben:
Ereignisse
17. März, 21 Uhr - 21. März, 10 Uhr
Nehmen Sie an der Meetup-Serie teil, um skalierbare KI-Lösungen basierend auf realen Anwendungsfällen mit Mitentwicklern und Experten zu erstellen.
Jetzt registrierenTraining
Modul
Implementieren von Resilienz in cloudnative Microservices - Training
In diesem Modul wird die Implementierung von Resilienz in eine .NET-Microservices-App in einem Kubernetes-Dienst erläutert.
Dokumentation
Implementieren des Trennschaltermusters - .NET
Erfahren Sie, wie das Circuit-Breaker-Muster als ergänzendes System zu HTTP-Wiederholungsversuchen implementieren können.
Verwenden von IHttpClientFactory zum Implementieren widerstandsfähiger HTTP-Anforderungen - .NET
Erfahren Sie, wie Sie IHttpClientFactory verwenden, die seit .NET Core 2.1 zum Erstellen von 'HttpClient'-Instanzen verfügbar sind, wodurch sie für Sie in Ihren Anwendungen einfach verwendet werden können.
Erstellen resilienter HTTP-Apps: Wichtige Entwicklungsmuster - .NET
Erfahren Sie, wie Sie mit dem NuGet-Paket „Microsoft.Extensions.Http.Resilience“ resiliente HTTP-Apps erstellen.