0Pricing
C# Academy · Lezione

Gestione degli errori e retry

Gestisca gli errori con retry e code dead-letter.

Gestione degli errori e retry è 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.

Gli errori sono normali

I consumer possono non riuscire: a causa di un errore temporaneo del database, di un timeout di un sistema downstream o di un bug dovuto a dati non validi. MassTransit offre strumenti organizzati su più livelli (retry, redelivery, code degli errori) per gestire gli errori correttamente invece di perdere i messaggi.

Retry immediato

Per brevi interruzioni, configuri il retry affinché MassTransit rielabori il messaggio alcune volte in rapida successione prima di rinunciare.

cfg.ReceiveEndpoint("orders", e =>
{
    e.UseMessageRetry(r => r.Immediate(3));
    e.ConfigureConsumer<OrderConsumer>(context);
});

Retry con intervallo ed esponenziale

Distanziare i tentativi di retry è utile quando il ripristino richiede più tempo. Utilizzi intervalli o un backoff esponenziale, in modo simile a Polly.

e.UseMessageRetry(r =>
    r.Exponential(5,
        minInterval: TimeSpan.FromSeconds(1),
        maxInterval: TimeSpan.FromMinutes(1),
        intervalDelta: TimeSpan.FromSeconds(2)));

Filtrare gli errori sottoposti a retry

Esegua il retry solo per le eccezioni temporanee; non lo esegua per quelle permanenti, come gli errori di convalida. Utilizzi Handle e Ignore per definire l'ambito dei retry.

e.UseMessageRetry(r =>
{
    r.Handle<TimeoutException>();
    r.Ignore<ValidationException>();
    r.Immediate(3);
});

Retry e redelivery a confronto

Retry mantiene il messaggio in memoria e lo rielabora rapidamente. La redelivery (retry ritardato o di secondo livello) restituisce il messaggio al broker affinché venga consegnato nuovamente molto più tardi, liberando nel frattempo il consumer.

e.UseDelayedRedelivery(r =>
    r.Intervals(TimeSpan.FromMinutes(5),
                TimeSpan.FromMinutes(15),
                TimeSpan.FromMinutes(30)));

Combinare entrambi i livelli

Una configurazione robusta utilizza il retry immediato per le brevi interruzioni e la redelivery ritardata per le interruzioni più lunghe. Configuri la redelivery all'esterno del retry, in modo che ogni tentativo di redelivery riceva a sua volta i propri retry immediati.

e.UseDelayedRedelivery(r => r.Intervals(
    TimeSpan.FromMinutes(5), TimeSpan.FromMinutes(15)));
e.UseMessageRetry(r => r.Immediate(3));

La coda degli errori

Quando tutti i retry e le redelivery sono esauriti, MassTransit sposta il messaggio in una coda degli errori (denominata <queue>_error). Il messaggio viene conservato con i dettagli dell'eccezione per consentire l'analisi e non viene mai eliminato senza avviso.

Fault

In caso di errore, MassTransit pubblica anche un evento Fault<T>. Altri servizi possono consumare i fault per inviare avvisi, registrare informazioni o attivare la compensazione.

public class OrderFaultConsumer : IConsumer<Fault<OrderPlaced>>
{
    public Task Consume(ConsumeContext<Fault<OrderPlaced>> context)
    {
        // inspect context.Message.Exceptions
        return Task.CompletedTask;
    }
}

L'importanza dell'idempotenza

Poiché retry e redelivery possono elaborare un messaggio più di una volta, i consumer devono essere idempotenti: gestire due volte lo stesso messaggio non deve comportare un doppio addebito o la duplicazione del lavoro. Utilizzi identificativi univoci e controlli di deduplicazione.

Rielaborazione dalla coda degli errori

Dopo aver corretto un bug, può spostare i messaggi dalla coda degli errori alla coda originale per rielaborarli, recuperando il lavoro precedentemente non riuscito.

Code dead-letter e skipped

MassTransit utilizza anche una coda skipped (_skipped) per i messaggi che nessun consumer voleva gestire, aiutando a individuare in produzione i tipi di messaggio instradati in modo errato o imprevisti.

Verifica rapida

Verifichi la gestione degli errori e i retry.

Riepilogo

MassTransit gestisce gli errori su più livelli: retry (immediato o esponenziale, con ambito definito da Handle/Ignore) per le brevi interruzioni, redelivery per le interruzioni più lunghe e una coda degli errori per i messaggi per i quali tutti i tentativi sono esauriti, oltre agli eventi Fault<T> per gli avvisi. Poiché i messaggi possono essere elaborati più di una volta, mantenga i consumer idempotenti e rielabori i messaggi dalla coda degli errori dopo aver corretto i bug.

Domande Frequenti

La lezione «Gestione degli errori e retry» è gratuita?

Sì — il testo completo di «Gestione degli errori e retry» è 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 «Gestione degli errori e retry»?

Gestisca gli errori con retry e code dead-letter. 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 «Gestione degli errori e retry»?

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

  1. Concetti di messaggistica
  2. Produzione e consumo dei messaggi
  3. Saga e workflow
  4. Gestione degli errori e retry
← Torna a C# Academy