C# Academy · Les

Saga's en workflows

Coördineer langlopende processen.

Les 3 van 413 stappen

Saga's en workflows is een gratis C# Academy-les op CoddyKit. Dit is les 3 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject C# Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus C# Academy bevat in totaal 4 lessen.

Langdurige werkstromen coördineren

Sommige bedrijfsprocessen omvatten in de loop van de tijd meerdere berichten en stappen: een bestelling plaatsen, een betaling innen, voorraad reserveren en verzenden. Een saga coördineert zo'n langdurige werkstroom en houdt de status ervan tussen berichten bij.

Wat is een saga

Een saga is een consumer met status. Hij correleert verwante berichten, bewaart de huidige status van de werkstroom en reageert op gebeurtenissen door tussen toestanden over te gaan totdat het proces is voltooid.

Saga's als toestandsmachines

MassTransit modelleert saga's als toestandsmachines met behulp van MassTransitStateMachine. Je definieert toestanden, gebeurtenissen en overgangen declaratief.

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

De toestand van de saga

De toestand is een klasse die SagaStateMachineInstance implementeert. Deze bevat een CorrelationId en alle gegevens die je tussen stappen moet onthouden.

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

Toestanden en gebeurtenissen declareren

Binnen de toestandsmachine declareer je State-eigenschappen en Event-eigenschappen die aan berichttypen worden gekoppeld.

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; }
}

Correlatie

Elke gebeurtenis moet aan de juiste saga-instantie worden gecorreleerd, meestal via een gedeelde id zoals OrderId. Hierdoor worden binnenkomende berichten naar de juiste werkstroom geleid die nog in uitvoering is.

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

Overgangen definiëren

De constructor legt het gedrag vast: de eerste gebeurtenis maakt de instantie aan, slaat gegevens op en gaat over naar de volgende toestand.

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

In een toestand reageren

Gebruik During om gebeurtenissen af te handelen die alleen in een bepaalde toestand geldig zijn, en publiceer vervolgens vervolgberichten voordat je naar de volgende toestand overgaat.

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

Saga-toestand opslaan

De toestand van een saga moet herstarts overleven en wordt daarom opgeslagen in een repository: Entity Framework, MongoDB, Redis of een ander systeem. MassTransit laadt en bewaart de instantie rond elk bericht.

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

Time-outs met planningen

Saga's kunnen een time-out inplannen (bijvoorbeeld annuleren als de betaling niet binnen 30 minuten is ontvangen) met behulp van een Schedule. Vervolgens kunnen ze de time-outgebeurtenis afhandelen om te compenseren.

Compensatie

Als een latere stap mislukt, kan een saga compenserende acties uitvoeren om eerdere acties ongedaan te maken (een betaling terugbetalen, voorraad vrijgeven). Zo blijft het totale proces consistent zonder gedistribueerde transacties.

Korte controle

Test saga's en werkstromen.

Samenvatting

Een saga coördineert langdurige werkstromen als een stateful, gecorreleerde consumer. MassTransit gebruikt MassTransitStateMachine met een toestand van het type SagaStateMachineInstance, gedeclareerde State- en Event-leden, correlatie op basis van een id en overgangen via Initially/During. De toestand wordt in een repository bewaard, time-outs gebruiken planningen en compensatie maakt eerdere stappen na een fout ongedaan.

Gratis beginnen

Leer C# met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
93
Lessen
346

Veelgestelde vragen

Is de les “Saga's en workflows” gratis?

Ja — de volledige tekst van “Saga's en workflows” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus C# Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus C# Academy bevat in totaal 4 lessen.

Wat leer ik in “Saga's en workflows”?

Coördineer langlopende processen. Je oefent met C# Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met C# Academy te beginnen?

Ervaring vooraf is niet nodig. C# Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 3 van 4.

Hoe lang duurt de les “Saga's en workflows”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over C# Academy?

Ja. Elke les over C# Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Berichtenconcepten
  2. Berichten produceren en consumeren
  3. Saga's en workflows
  4. Foutafhandeling en retries
← Terug naar C# Academy