Sagas et flux de travail
Coordonnez des processus de longue durée.
Sagas et flux de travail est une leçon C# Academy gratuite sur CoddyKit. Ceci est la leçon 3 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.
Coordonner des processus longs
Certains processus métier s’étendent sur plusieurs messages et étapes au fil du temps : passer une commande, débiter le paiement, réserver le stock, expédier. Une saga coordonne un tel processus de longue durée et en suit l’état entre les messages.
Qu’est-ce qu’une saga ?
Une saga est un consommateur avec état. Elle met en corrélation les messages associés, conserve l’état actuel du processus et réagit aux événements en passant d’un état à l’autre jusqu’à la fin du processus.
Sagas sous forme de machines à états
MassTransit modélise les sagas comme des machines à états à l’aide de MassTransitStateMachine. Vous définissez les états, les événements et les transitions de manière déclarative.
dotnet add package MassTransit
// state machine sagas are built inL’état de la saga
L’état est une classe qui implémente SagaStateMachineInstance. Elle contient un CorrelationId ainsi que toutes les données dont vous devez vous souvenir entre les étapes.
public class OrderState : SagaStateMachineInstance
{
public Guid CorrelationId { get; set; }
public string CurrentState { get; set; }
public decimal Amount { get; set; }
}Déclarer les états et les événements
Dans la machine à états, vous déclarez des propriétés State et des propriétés Event qui correspondent aux types de messages.
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; }
}Corrélation
Chaque événement doit être associé à la bonne instance de saga, généralement au moyen d’un identifiant partagé tel que OrderId. Cela achemine les messages entrants vers le bon processus en cours.
Event(() => PaymentReceived, e =>
e.CorrelateById(m => m.Message.OrderId));Définir les transitions
Le constructeur configure le comportement : l’événement initial crée l’instance, enregistre les données et effectue la transition vers l’état suivant.
Initially(
When(OrderPlaced)
.Then(ctx => ctx.Saga.Amount = ctx.Message.Amount)
.TransitionTo(AwaitingPayment));Réagir dans un état
Utilisez During pour traiter les événements valides uniquement dans un état particulier, puis publiez les messages de suivi et effectuez la transition suivante.
During(AwaitingPayment,
When(PaymentReceived)
.Publish(ctx => new OrderConfirmed(ctx.Saga.CorrelationId))
.TransitionTo(Completed)
.Finalize());Persister l’état d’une saga
L’état d’une saga doit survivre aux redémarrages ; il est donc stocké dans un référentiel : Entity Framework, MongoDB, Redis ou autre. MassTransit charge et enregistre l’instance autour de chaque message.
x.AddSagaStateMachine<OrderSaga, OrderState>()
.EntityFrameworkRepository(r =>
{
r.ExistingDbContext<OrderDbContext>();
});Délais d’expiration avec des planifications
Les sagas peuvent planifier un délai d’expiration (par exemple, annuler si le paiement n’est pas reçu dans les 30 minutes) à l’aide de Schedule, puis traiter l’événement d’expiration pour effectuer une compensation.
Compensation
Si une étape ultérieure échoue, une saga peut exécuter des actions compensatoires pour annuler les précédentes (rembourser un débit, libérer du stock), en maintenant la cohérence globale du processus sans transactions distribuées.
Vérification rapide
Vérifiez les sagas et les processus.
Récapitulatif
Une saga coordonne des processus de longue durée en tant que consommateur avec état et corrélé. MassTransit utilise MassTransitStateMachine avec un état SagaStateMachineInstance, des membres State/Event déclarés, une corrélation par identifiant et des transitions au moyen de Initially/During. L’état est persisté dans un référentiel, les délais d’expiration utilisent des planifications et la compensation annule les étapes précédentes en cas d’échec.
Questions Fréquemment Posées
La leçon « Sagas et flux de travail » est-elle gratuite ?
Oui — le texte complet de « Sagas et flux de travail » 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 « Sagas et flux de travail » ?
Coordonnez des processus de longue durée. 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 3 sur 4.
Combien de temps prend la leçon « Sagas et flux de travail » ?
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
- Concepts de messagerie
- Produire et consommer des messages
- Sagas et flux de travail
- Gestion des erreurs et nouvelles tentatives