Fehlerbehandlung und Wiederholungen
Behandeln Sie Fehler mit Wiederholungen und Dead-Letter-Queues.
Fehlerbehandlung und Wiederholungen 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.
Fehler sind normal
Consumer können fehlschlagen: durch einen vorübergehenden Datenbankfehler, einen Timeout eines nachgelagerten Systems oder einen Fehler bei ungültigen Daten. MassTransit stellt mehrere aufeinander aufbauende Werkzeuge bereit (Retry, Redelivery, Error Queues), damit Fehler kontrolliert behandelt werden, anstatt Nachrichten zu verlieren.
Sofortiger Retry
Bei kurzen Störungen konfigurieren Sie einen Retry, sodass MassTransit die Nachricht einige Male in kurzer Folge erneut verarbeitet, bevor der Vorgang endgültig fehlschlägt.
cfg.ReceiveEndpoint("orders", e =>
{
e.UseMessageRetry(r => r.Immediate(3));
e.ConfigureConsumer<OrderConsumer>(context);
});Retry mit Intervallen und exponentiellem Backoff
Größere Abstände zwischen den Retries helfen, wenn die Wiederherstellung länger dauert. Verwenden Sie Intervalle oder exponentielles Backoff, ähnlich wie bei Polly.
e.UseMessageRetry(r =>
r.Exponential(5,
minInterval: TimeSpan.FromSeconds(1),
maxInterval: TimeSpan.FromMinutes(1),
intervalDelta: TimeSpan.FromSeconds(2)));Festlegen, welche Fehler erneut versucht werden
Wiederholen Sie nur bei vorübergehenden Ausnahmen; bei dauerhaften Fehlern wie Validierungsfehlern sollten Sie keinen Retry durchführen. Verwenden Sie Handle und Ignore, um Retries gezielt einzuschränken.
e.UseMessageRetry(r =>
{
r.Handle<TimeoutException>();
r.Ignore<ValidationException>();
r.Immediate(3);
});Retry vs. Redelivery
Retry hält die Nachricht im Speicher und verarbeitet sie schnell erneut. Redelivery (verzögerter Retry bzw. Retry auf zweiter Ebene) gibt die Nachricht an den Broker zurück, damit sie deutlich später erneut zugestellt wird. In der Zwischenzeit wird der Consumer entlastet.
e.UseDelayedRedelivery(r =>
r.Intervals(TimeSpan.FromMinutes(5),
TimeSpan.FromMinutes(15),
TimeSpan.FromMinutes(30)));Beide Ebenen kombinieren
Eine robuste Konfiguration verwendet bei kurzen Störungen einen sofortigen Retry und bei längeren Ausfällen eine verzögerte Redelivery. Konfigurieren Sie die Redelivery außerhalb des Retries, damit auch jeder Redelivery-Versuch seine eigenen sofortigen Retries erhält.
e.UseDelayedRedelivery(r => r.Intervals(
TimeSpan.FromMinutes(5), TimeSpan.FromMinutes(15)));
e.UseMessageRetry(r => r.Immediate(3));Die Error Queue
Wenn alle Retries und Redeliveries ausgeschöpft sind, verschiebt MassTransit die Nachricht in eine Error Queue (mit dem Namen <queue>_error). Die Nachricht bleibt zusammen mit den Ausnahmeinformationen zur Untersuchung erhalten und wird niemals stillschweigend verworfen.
Faults
Bei einem Fehler veröffentlicht MassTransit außerdem ein Fault<T>-Event. Andere Dienste können Faults konsumieren, um Alarme auszulösen, zu protokollieren oder eine Kompensation zu starten.
public class OrderFaultConsumer : IConsumer<Fault<OrderPlaced>>
{
public Task Consume(ConsumeContext<Fault<OrderPlaced>> context)
{
// inspect context.Message.Exceptions
return Task.CompletedTask;
}
}Idempotenz ist wichtig
Da Retries und Redelivery eine Nachricht mehr als einmal verarbeiten können, müssen Consumer idempotent sein: Die zweimalige Verarbeitung derselben Nachricht darf weder eine doppelte Abbuchung noch doppelte Arbeit verursachen. Verwenden Sie eindeutige IDs und Prüfungen zur Duplikaterkennung.
Nachrichten aus der Error Queue erneut abspielen
Nachdem Sie einen Fehler behoben haben, können Sie Nachrichten aus der Error Queue zurück in die ursprüngliche Queue verschieben und erneut verarbeiten. So lässt sich zuvor fehlgeschlagene Arbeit wiederherstellen.
Dead-Letter- und Skipped-Queues
MassTransit verwendet außerdem eine Skipped-Queue (_skipped) für Nachrichten, die kein Consumer verarbeiten wollte. So können Sie in der Produktion falsch geroutete oder unerwartete Nachrichtentypen erkennen.
Kurzer Test
Testen Sie die Fehlerbehandlung und Retries.
Zusammenfassung
MassTransit verwendet mehrere Ebenen zur Fehlerbehandlung: Retry (sofortig/exponentiell, mit Handle/Ignore eingeschränkt) bei kurzen Störungen, Redelivery bei längeren Ausfällen und eine Error Queue für Nachrichten, bei denen alle Versuche ausgeschöpft sind, sowie Fault<T>-Events zur Alarmierung. Da Nachrichten mehr als einmal verarbeitet werden können, müssen Consumer idempotent sein. Nach der Behebung von Fehlern können Sie Nachrichten aus der Error Queue erneut abspielen.
Häufig gestellte Fragen
Ist die Lektion „Fehlerbehandlung und Wiederholungen“ kostenlos?
Ja — der vollständige Text von „Fehlerbehandlung und Wiederholungen“ 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 „Fehlerbehandlung und Wiederholungen“?
Behandeln Sie Fehler mit Wiederholungen und Dead-Letter-Queues. 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 „Fehlerbehandlung und Wiederholungen“?
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
- Grundlagen der Nachrichtenübermittlung
- Nachrichten produzieren und konsumieren
- Sagas und Workflows
- Fehlerbehandlung und Wiederholungen