0Pricing
C# Academy · Lección

Sagas y workflows

Coordine procesos de larga duración.

Sagas y workflows es una lección gratuita de C# Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C# Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C# Academy incluye 4 lecciones en total.

Coordinar flujos de trabajo prolongados

Algunos procesos de negocio abarcan varios mensajes y pasos a lo largo del tiempo: realizar un pedido, cobrar el pago, reservar existencias y enviarlas. Una saga coordina este tipo de flujo de trabajo prolongado y realiza un seguimiento de su estado entre mensajes.

¿Qué es una saga?

Una saga es un consumidor con estado. Correlaciona los mensajes relacionados, conserva el estado actual del flujo de trabajo y reacciona a los eventos pasando de un estado a otro hasta que finaliza el proceso.

Sagas de máquina de estados

MassTransit modela las sagas como máquinas de estados mediante MassTransitStateMachine. Puede definir estados, eventos y transiciones de forma declarativa.

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

El estado de la saga

El estado es una clase que implementa SagaStateMachineInstance. Contiene un CorrelationId, además de cualquier dato que necesite recordar entre pasos.

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

Declarar estados y eventos

Dentro de la máquina de estados, declare propiedades State y propiedades Event que se correspondan con tipos de mensaje.

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

Correlación

Cada evento debe correlacionarse con la instancia de saga correcta, normalmente mediante un identificador compartido como OrderId. Esto dirige los mensajes entrantes al flujo de trabajo correcto que está en curso.

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

Definir transiciones

El constructor conecta el comportamiento: el evento inicial crea la instancia, almacena los datos y cambia al estado siguiente.

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

Reaccionar en un estado

Utilice During para gestionar eventos válidos únicamente en un estado concreto; después, publique mensajes posteriores y continúe con la transición.

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

Persistir el estado de la saga

El estado de la saga debe sobrevivir a los reinicios, por lo que se almacena en un repositorio: Entity Framework, MongoDB, Redis u otros. MassTransit carga y guarda la instancia alrededor de cada mensaje.

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

Tiempos de espera con programaciones

Las sagas pueden programar un tiempo de espera (por ejemplo, cancelar si no se recibe el pago en 30 minutos) mediante un Schedule y después gestionar el evento de tiempo de espera para compensar.

Compensación

Si falla un paso posterior, una saga puede ejecutar acciones compensatorias para deshacer las anteriores (reembolsar un cobro o liberar existencias), manteniendo la coherencia del proceso general sin transacciones distribuidas.

Comprobación rápida

Pruebe las sagas y los flujos de trabajo.

Repaso

Una saga coordina flujos de trabajo prolongados como un consumidor con estado y correlacionado. MassTransit utiliza MassTransitStateMachine con un estado SagaStateMachineInstance, miembros State/Event declarados, correlación mediante identificadores y transiciones con Initially/During. El estado se persiste en un repositorio, los tiempos de espera utilizan programaciones y la compensación deshace los pasos anteriores cuando se produce un error.

Preguntas frecuentes

¿La lección «Sagas y workflows» es gratis?

Sí — el texto completo de «Sagas y workflows» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C# Academy, actualiza a CoddyKit PRO. El curso de C# Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Sagas y workflows»?

Coordine procesos de larga duración. Practicas C# Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar C# Academy?

No se requiere experiencia previa. C# Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.

¿Cuánto tiempo toma la lección «Sagas y workflows»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de C# Academy?

Sí. Cada lección de C# Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Conceptos de mensajería
  2. Producción y consumo de mensajes
  3. Sagas y workflows
  4. Gestión de errores y reintentos
← Volver a C# Academy