0Pricing
C# Academy · Lektion

Sagas und Workflows

Koordinieren Sie lang laufende Prozesse.

Sagas und Workflows ist eine kostenlose C# Academy-Lektion auf CoddyKit. Dies ist Lektion 3 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.

Lang andauernde Workflows koordinieren

Manche Geschäftsprozesse erstrecken sich über mehrere Nachrichten und Schritte: Bestellung aufgeben, Zahlung einziehen, Bestand reservieren, versenden. Eine saga koordiniert einen solchen lang laufenden Workflow und verfolgt seinen Zustand über mehrere Nachrichten hinweg.

Was ist eine Saga?

Eine saga ist ein zustandsbehafteter Consumer. Sie korreliert zusammengehörige Nachrichten, speichert den aktuellen Zustand des Workflows und reagiert auf Events mit Übergängen zwischen Zuständen, bis der Prozess abgeschlossen ist.

Sagas als Zustandsautomaten

MassTransit modelliert Sagas als Zustandsautomaten mithilfe von MassTransitStateMachine. Sie definieren Zustände, Events und Übergänge deklarativ.

dotnet add package MassTransit
// state machine sagas are built in

Der Saga-Zustand

Der Zustand ist eine Klasse, die SagaStateMachineInstance implementiert. Sie enthält eine CorrelationId sowie alle Daten, die zwischen den einzelnen Schritten gespeichert werden müssen.

public class OrderState : SagaStateMachineInstance
{
    public Guid CorrelationId { get; set; }
    public string CurrentState { get; set; }
    public decimal Amount { get; set; }
}

Zustände und Events deklarieren

Innerhalb des Zustandsautomaten deklarieren Sie State- und Event-Eigenschaften, die Nachrichtentypen abbilden.

public class OrderSaga : MassTransitStateMachine<OrderState>
{
    public State AwaitingPayment { get; private set; }
    public State Completed { get; private set; }
    public Event<OrderPlaced> OrderPlaced { get; private set; }
    public Event<PaymentReceived> PaymentReceived { get; private set; }
}

Korrelation

Jedes Event muss der richtigen Saga-Instanz zugeordnet werden, normalerweise anhand einer gemeinsamen ID wie OrderId. Dadurch werden eingehende Nachrichten an den richtigen laufenden Workflow weitergeleitet.

Event(() => PaymentReceived, e =>
    e.CorrelateById(m => m.Message.OrderId));

Übergänge definieren

Der Konstruktor legt das Verhalten fest: Das initiale Event erstellt die Instanz, speichert Daten und wechselt in den nächsten Zustand.

Initially(
    When(OrderPlaced)
        .Then(ctx => ctx.Saga.Amount = ctx.Message.Amount)
        .TransitionTo(AwaitingPayment));

In einem Zustand reagieren

Verwenden Sie During, um Events zu verarbeiten, die nur in einem bestimmten Zustand gültig sind, und veröffentlichen Sie anschließend Folgemeldungen, bevor Sie in den nächsten Zustand wechseln.

During(AwaitingPayment,
    When(PaymentReceived)
        .Publish(ctx => new OrderConfirmed(ctx.Saga.CorrelationId))
        .TransitionTo(Completed)
        .Finalize());

Saga-Zustand persistieren

Der Saga-Zustand muss Neustarts überstehen und wird deshalb in einem Repository gespeichert, etwa in Entity Framework, MongoDB oder Redis. MassTransit lädt die Instanz vor jeder Nachricht und speichert sie danach wieder.

x.AddSagaStateMachine<OrderSaga, OrderState>()
    .EntityFrameworkRepository(r =>
    {
        r.ExistingDbContext<OrderDbContext>();
    });

Timeouts mit Zeitplänen

Sagas können mithilfe eines Schedule einen Timeout planen, zum Beispiel eine Stornierung, falls die Zahlung nicht innerhalb von 30 Minuten eingeht. Anschließend können sie das Timeout-Event behandeln, um eine Kompensation auszuführen.

Kompensation

Wenn ein späterer Schritt fehlschlägt, kann eine Saga kompensierende Aktionen ausführen, um frühere Aktionen rückgängig zu machen (eine Zahlung erstatten, Bestand freigeben). So bleibt der Gesamtprozess auch ohne verteilte Transaktionen konsistent.

Kurzer Test

Testen Sie Sagas und Workflows.

Zusammenfassung

Eine saga koordiniert lang laufende Workflows als zustandsbehafteter, korrelierter Consumer. MassTransit verwendet MassTransitStateMachine mit einem Zustand vom Typ SagaStateMachineInstance, deklarierten State-/Event-Membern, Korrelation anhand einer ID und Übergängen über Initially/During. Der Zustand wird in einem Repository persistiert, Timeouts verwenden Zeitpläne, und eine Kompensation macht bei einem Fehler frühere Schritte rückgängig.

Häufig gestellte Fragen

Ist die Lektion „Sagas und Workflows“ kostenlos?

Ja — der vollständige Text von „Sagas und Workflows“ 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 „Sagas und Workflows“?

Koordinieren Sie lang laufende Prozesse. 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 3 von 4.

Wie lange dauert die Lektion „Sagas und Workflows“?

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

  1. Grundlagen der Nachrichtenübermittlung
  2. Nachrichten produzieren und konsumieren
  3. Sagas und Workflows
  4. Fehlerbehandlung und Wiederholungen
← Zurück zu C# Academy