Resilienz-Pipelines
Kombinieren Sie Strategien zu Resilienz-Pipelines.
Resilienz-Pipelines ist eine kostenlose C# Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C# Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C# Academy-Kurs umfasst insgesamt 4 Lektionen.
Strategien kombinieren
Für echte Resilienz müssen meist mehrere Strategien zusammenarbeiten. Mit Polly v8 können Sie sie mithilfe des ResiliencePipelineBuilder zu einer einzigen Resilienzpipeline kombinieren.
Der ResiliencePipelineBuilder
Sie verketten Add...-Aufrufe und schließen mit Build() ab. Das Ergebnis ist eine wiederverwendbare, threadsichere ResiliencePipeline, über die Sie Aufrufe ausführen.
var pipeline = new ResiliencePipelineBuilder()
.AddRetry(new RetryStrategyOptions())
.AddTimeout(TimeSpan.FromSeconds(5))
.Build();Die Reihenfolge ist wichtig
Strategien werden von außen nach innen ausgeführt: Die zuerst hinzugefügte Strategie umschließt die übrigen. Eine gängige und korrekte Reihenfolge besteht aus einem Timeout pro Versuch innerhalb der Wiederholungsstrategie sowie einem übergreifenden Timeout und Circuit Breaker, die beide um diese Strategien liegen.
var pipeline = new ResiliencePipelineBuilder()
.AddTimeout(TimeSpan.FromSeconds(10)) // overall
.AddRetry(new RetryStrategyOptions())
.AddCircuitBreaker(new CircuitBreakerStrategyOptions())
.AddTimeout(TimeSpan.FromSeconds(2)) // per attempt
.Build();Typisierte Pipelines
Wenn Strategien das Ergebnis prüfen, etwa ein Fallback oder eine ergebnisbasierte Wiederholungsstrategie, verwenden Sie den generischen ResiliencePipelineBuilder<T>, damit die Pipeline den Rückgabetyp kennt.
var pipeline = new ResiliencePipelineBuilder<HttpResponseMessage>()
.AddRetry(new HttpRetryStrategyOptions())
.Build();Ausführung mit Zustand
Um unnötige Speicherzuweisungen durch Closures zu vermeiden, übergeben Sie den Zustand an ExecuteAsync. Polly reicht ihn an Ihren Callback weiter.
await pipeline.ExecuteAsync(
static async (state, token) => await state.CallAsync(token),
myService);Der ResiliencePipelineProvider
Statt Pipelines direkt im Code zu erstellen, registrieren Sie benannte Pipelines in DI und lösen sie über ResiliencePipelineProvider auf. Dadurch wird die Konfiguration zentralisiert.
builder.Services.AddResiliencePipeline("db", pipeline =>
{
pipeline.AddRetry(new RetryStrategyOptions())
.AddTimeout(TimeSpan.FromSeconds(3));
});Eine benannte Pipeline auflösen
Injizieren Sie ResiliencePipelineProvider<string> und rufen Sie Ihre Pipeline überall dort anhand ihres Schlüssels ab, wo Sie sie benötigen.
public class OrderService
{
private readonly ResiliencePipeline _pipeline;
public OrderService(ResiliencePipelineProvider<string> provider)
{
_pipeline = provider.GetPipeline("db");
}
}Resilienz für HttpClient
Die Erweiterung AddResilienceHandler hängt eine Pipeline an einen typisierten oder benannten HttpClient an und wendet sie auf jede ausgehende Anfrage an.
builder.Services.AddHttpClient<CatalogClient>()
.AddResilienceHandler("catalog", b =>
{
b.AddRetry(new HttpRetryStrategyOptions());
b.AddCircuitBreaker(new HttpCircuitBreakerStrategyOptions());
});Der Standard-Resilienzhandler
Microsoft stellt mit AddStandardResilienceHandler einen umfassend ausgestatteten Resilienzhandler bereit, der sinnvolle Wiederholungsversuche, Circuit Breaker, Timeouts und Ratenbegrenzung in der empfohlenen Reihenfolge kombiniert.
builder.Services.AddHttpClient<CatalogClient>()
.AddStandardResilienceHandler();Pipelines sind wiederverwendbar und ressourcenschonend
Erstellen Sie eine Pipeline einmal und verwenden Sie sie für viele Ausführungen wieder. Pipelines sind unveränderlich und threadsicher, sodass ihre gemeinsame Nutzung sicher und effizient ist.
Hooks für die Beobachtbarkeit
Jede Strategie stellt Callbacks bereit, etwa OnRetry, OnOpened, OnTimeout und OnFallback. Außerdem gibt Polly Telemetriedaten aus, die Sie für eine vollständige Übersicht in Protokollierung und Metriken integrieren können.
Kurzer Check
Testen Sie Resilienzpipelines.
Zusammenfassung
Der ResiliencePipelineBuilder kombiniert Wiederholungsversuche, Circuit Breaker, Timeout und Fallback zu einer wiederverwendbaren Pipeline. Die Reihenfolge verläuft von außen nach innen und ist daher wichtig. Verwenden Sie den generischen Builder für ergebnisabhängige Strategien, registrieren Sie benannte Pipelines mit AddResiliencePipeline und lösen Sie sie über ResiliencePipelineProvider auf. Für HTTP schützen AddResilienceHandler oder AddStandardResilienceHandler jede Anfrage.
Häufig gestellte Fragen
Ist die Lektion „Resilienz-Pipelines“ kostenlos?
Ja — der vollständige Text von „Resilienz-Pipelines“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C# Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C# Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Resilienz-Pipelines“?
Kombinieren Sie Strategien zu Resilienz-Pipelines. Du übst C# Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um C# Academy zu starten?
Keine Vorkenntnisse erforderlich. C# Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.
Wie lange dauert die Lektion „Resilienz-Pipelines“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser C# Academy-Lektion Code schreiben und ausführen?
Ja. Jede C# Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Retry-Richtlinien
- Circuit-Breaker-Muster
- Timeout- und Fallback-Richtlinien
- Resilienz-Pipelines