Pipeline di resilienza
Combini le strategie in pipeline di resilienza.
Pipeline di resilienza è una lezione C# Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C# Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C# Academy include 4 lezioni in totale.
Comporre le strategie
La resilienza reale richiede generalmente più strategie che lavorano insieme. Polly v8 consente di comporle in un'unica pipeline di resilienza usando ResiliencePipelineBuilder.
ResiliencePipelineBuilder
Si concatenano le chiamate Add... e si termina con Build(). Il risultato è una ResiliencePipeline riutilizzabile e sicura per l'uso concorrente, attraverso la quale si eseguono le chiamate.
var pipeline = new ResiliencePipelineBuilder()
.AddRetry(new RetryStrategyOptions())
.AddTimeout(TimeSpan.FromSeconds(5))
.Build();L'ordine è importante
Le strategie vengono eseguite dall'esterno verso l'interno: la prima aggiunta avvolge le altre. Un ordine comune e corretto prevede il timeout per tentativo all'interno del retry, con un timeout complessivo e un circuit breaker all'esterno.
var pipeline = new ResiliencePipelineBuilder()
.AddTimeout(TimeSpan.FromSeconds(10)) // overall
.AddRetry(new RetryStrategyOptions())
.AddCircuitBreaker(new CircuitBreakerStrategyOptions())
.AddTimeout(TimeSpan.FromSeconds(2)) // per attempt
.Build();Pipeline tipizzate
Quando le strategie analizzano il risultato, come nel caso di un fallback o di un retry basato sul risultato, usi il generico ResiliencePipelineBuilder<T>, così la pipeline conosce il tipo restituito.
var pipeline = new ResiliencePipelineBuilder<HttpResponseMessage>()
.AddRetry(new HttpRetryStrategyOptions())
.Build();Eseguire con lo stato
Per evitare allocazioni dovute alle closure, passi lo stato a ExecuteAsync; Polly lo restituisce al callback.
await pipeline.ExecuteAsync(
static async (state, token) => await state.CallAsync(token),
myService);ResiliencePipelineProvider
Anziché costruire le pipeline direttamente nel codice, registri pipeline denominate nella DI e le risolva tramite ResiliencePipelineProvider. In questo modo la configurazione viene centralizzata.
builder.Services.AddResiliencePipeline("db", pipeline =>
{
pipeline.AddRetry(new RetryStrategyOptions())
.AddTimeout(TimeSpan.FromSeconds(3));
});Risolvere una pipeline denominata
Inietti ResiliencePipelineProvider<string> e recuperi la pipeline tramite la relativa chiave ovunque sia necessaria.
public class OrderService
{
private readonly ResiliencePipeline _pipeline;
public OrderService(ResiliencePipelineProvider<string> provider)
{
_pipeline = provider.GetPipeline("db");
}
}Resilienza per HttpClient
L'estensione AddResilienceHandler associa una pipeline a un HttpClient tipizzato o denominato, applicandola a ogni richiesta in uscita.
builder.Services.AddHttpClient<CatalogClient>()
.AddResilienceHandler("catalog", b =>
{
b.AddRetry(new HttpRetryStrategyOptions());
b.AddCircuitBreaker(new HttpCircuitBreakerStrategyOptions());
});Il gestore di resilienza standard
Microsoft fornisce AddStandardResilienceHandler, una soluzione completa che include retry, circuit breaker, timeout e limitazione della frequenza secondo l'ordine consigliato.
builder.Services.AddHttpClient<CatalogClient>()
.AddStandardResilienceHandler();Le pipeline sono riutilizzabili ed efficienti
Costruisca una pipeline una sola volta e la riutilizzi per molte esecuzioni. Le pipeline sono immutabili e sicure per l'uso concorrente, quindi condividerle è sicuro ed efficiente.
Hook di osservabilità
Ogni strategia espone callback, come OnRetry, OnOpened, OnTimeout e OnFallback; inoltre Polly emette dati di telemetria che è possibile collegare a registri e metriche per ottenere una visibilità completa.
Controllo rapido
Verifichi le pipeline di resilienza.
Riepilogo
ResiliencePipelineBuilder compone retry, circuit breaker, timeout e fallback in un'unica pipeline riutilizzabile; l'ordine va dall'esterno verso l'interno, quindi è importante. Usi il builder generico per le strategie consapevoli del risultato, registri pipeline denominate con AddResiliencePipeline e le risolva tramite ResiliencePipelineProvider. Per HTTP, AddResilienceHandler o AddStandardResilienceHandler proteggono ogni richiesta.
Domande Frequenti
La lezione «Pipeline di resilienza» è gratuita?
Sì — il testo completo di «Pipeline di resilienza» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C# Academy, passa a CoddyKit PRO. Il corso C# Academy include 4 lezioni in totale.
Cosa imparerò in «Pipeline di resilienza»?
Combini le strategie in pipeline di resilienza. Eserciti C# Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare C# Academy?
Non è richiesta alcuna esperienza precedente. C# Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.
Quanto tempo richiede la lezione «Pipeline di resilienza»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione C# Academy?
Sì. Ogni lezione C# Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Policy di retry
- Pattern Circuit Breaker
- Policy di timeout e fallback
- Pipeline di resilienza