0Pricing
C# Academy · Leçon

Gestion des erreurs et nouvelles tentatives

Gérez les défaillances avec des nouvelles tentatives et des files d’attente de lettres mortes.

Gestion des erreurs et nouvelles tentatives est une leçon C# Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage C# Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours C# Academy comprend 4 leçons au total.

Les échecs sont normaux

Les consommateurs échouent : erreur temporaire de base de données, délai d’expiration d’un système en aval, anomalie liée à des données incorrectes. MassTransit fournit des outils en plusieurs niveaux (nouvelles tentatives, relivraison, files d’attente d’erreurs) afin de gérer les échecs correctement au lieu de perdre les messages.

Nouvelle tentative immédiate

Pour les interruptions brèves, configurez une nouvelle tentative afin que MassTransit retraite le message plusieurs fois à intervalles rapprochés avant d’abandonner.

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

Nouvelles tentatives à intervalles et exponentielles

Espacer les nouvelles tentatives est utile lorsque la récupération prend plus de temps. Utilisez des intervalles ou un délai exponentiel, comme avec Polly.

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

Filtrer les erreurs qui déclenchent une nouvelle tentative

Effectuez une nouvelle tentative uniquement pour les exceptions temporaires ; ne recommencez pas pour les erreurs permanentes, comme les échecs de validation. Utilisez Handle et Ignore pour limiter la portée des nouvelles tentatives.

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

Nouvelle tentative ou relivraison

La nouvelle tentative conserve le message en mémoire et le retraite rapidement. La relivraison (nouvelle tentative différée ou de second niveau) renvoie le message au courtier afin qu’il soit livré à nouveau bien plus tard, ce qui libère le consommateur entre-temps.

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

Combiner les deux niveaux

Une configuration robuste utilise une nouvelle tentative immédiate pour les interruptions brèves et une relivraison différée pour les pannes plus longues. Configurez la relivraison autour de la nouvelle tentative afin que chaque tentative de relivraison bénéficie également de ses propres nouvelles tentatives immédiates.

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

La file d’attente des erreurs

Lorsque toutes les nouvelles tentatives et relivraisons sont épuisées, MassTransit déplace le message vers une file d’attente des erreurs (nommée <queue>_error). Le message est conservé avec les détails de l’exception pour permettre son analyse ; il n’est jamais supprimé silencieusement.

Erreurs

En cas d’échec, MassTransit publie également un événement Fault<T>. D’autres services peuvent consommer ces erreurs pour déclencher une alerte, journaliser l’événement ou lancer une compensation.

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

L’idempotence est importante

Comme les nouvelles tentatives et les relivraisons peuvent traiter un message plusieurs fois, les consommateurs doivent être idempotents : traiter deux fois le même message ne doit pas entraîner un double débit ni dupliquer le travail. Utilisez des identifiants uniques et des vérifications de déduplication.

Rejouer depuis la file d’attente des erreurs

Après avoir corrigé une anomalie, vous pouvez déplacer les messages de la file d’attente des erreurs vers la file d’attente d’origine afin de les retraiter et de récupérer le travail qui avait échoué.

Files d’attente des messages rejetés et ignorés

MassTransit utilise également une file d’attente des messages ignorés (_skipped) pour les messages qu’aucun consommateur ne souhaitait traiter, ce qui vous aide à repérer en production les types de messages mal acheminés ou inattendus.

Vérification rapide

Vérifiez la gestion des erreurs et les nouvelles tentatives.

Récapitulatif

MassTransit gère les échecs en plusieurs niveaux : nouvelle tentative (immédiate ou exponentielle, limitée avec Handle/Ignore) pour les interruptions brèves, relivraison pour les pannes plus longues et file d’attente des erreurs pour les messages dont les tentatives sont épuisées, ainsi que des événements Fault<T> pour les alertes. Comme les messages peuvent être traités plusieurs fois, veillez à ce que les consommateurs soient idempotents et rejouez les messages depuis la file d’attente des erreurs après avoir corrigé les anomalies.

Questions Fréquemment Posées

La leçon « Gestion des erreurs et nouvelles tentatives » est-elle gratuite ?

Oui — le texte complet de « Gestion des erreurs et nouvelles tentatives » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours C# Academy, passe à CoddyKit PRO. Le cours C# Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Gestion des erreurs et nouvelles tentatives » ?

Gérez les défaillances avec des nouvelles tentatives et des files d’attente de lettres mortes. Tu pratiques C# Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer C# Academy ?

Aucune expérience préalable n'est requise. C# Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.

Combien de temps prend la leçon « Gestion des erreurs et nouvelles tentatives » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon C# Academy ?

Oui. Chaque leçon C# Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Concepts de messagerie
  2. Produire et consommer des messages
  3. Sagas et flux de travail
  4. Gestion des erreurs et nouvelles tentatives
← Retour à C# Academy