0Pricing
C# Academy · Lección

Gestión de errores y reintentos

Gestione errores con reintentos y colas de mensajes no entregables.

Gestión de errores y reintentos es una lección gratuita de C# Academy en CoddyKit. Esta es la lección 4 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.

Los fallos son normales

Los consumidores pueden fallar: por un error transitorio de base de datos, un tiempo de espera agotado en un servicio posterior o un error en datos incorrectos. MassTransit proporciona herramientas por capas (reintentos, reentrega y colas de errores) para gestionar los fallos correctamente en lugar de perder mensajes.

Reintento inmediato

Para interrupciones breves, configure el reintento para que MassTransit vuelva a procesar el mensaje varias veces seguidas y rápidamente antes de abandonar.

cfg.ReceiveEndpoint("orders", e =>
{
    e.UseMessageRetry(r => r.Immediate(3));
    e.ConfigureConsumer<OrderConsumer>(context);
});

Reintento por intervalos y exponencial

Separar los reintentos ayuda cuando la recuperación tarda más. Utilice intervalos o un retroceso exponencial, de forma similar a Polly.

e.UseMessageRetry(r =>
    r.Exponential(5,
        minInterval: TimeSpan.FromSeconds(1),
        maxInterval: TimeSpan.FromMinutes(1),
        intervalDelta: TimeSpan.FromSeconds(2)));

Filtrar los errores que se reintentan

Reintente únicamente las excepciones transitorias; no reintente las permanentes, como los fallos de validación. Utilice Handle y Ignore para limitar los reintentos.

e.UseMessageRetry(r =>
{
    r.Handle<TimeoutException>();
    r.Ignore<ValidationException>();
    r.Immediate(3);
});

Reintento frente a reentrega

El reintento mantiene el mensaje en memoria y lo vuelve a procesar rápidamente. La reentrega (reintento diferido o de segundo nivel) devuelve el mensaje al broker para que se entregue de nuevo mucho más tarde, liberando mientras tanto al consumidor.

e.UseDelayedRedelivery(r =>
    r.Intervals(TimeSpan.FromMinutes(5),
                TimeSpan.FromMinutes(15),
                TimeSpan.FromMinutes(30)));

Combinar ambas capas

Una configuración sólida utiliza el reintento inmediato para las interrupciones breves y la reentrega diferida para las interrupciones prolongadas. Configure la reentrega fuera del reintento para que cada intento de reentrega también tenga sus propios reintentos inmediatos.

e.UseDelayedRedelivery(r => r.Intervals(
    TimeSpan.FromMinutes(5), TimeSpan.FromMinutes(15)));
e.UseMessageRetry(r => r.Immediate(3));

La cola de errores

Cuando se agotan todos los reintentos y las reentregas, MassTransit mueve el mensaje a una cola de errores (denominada <queue>_error). El mensaje se conserva con los detalles de la excepción para investigarlo y nunca se descarta silenciosamente.

Fallos

Cuando se produce un fallo, MassTransit también publica un evento Fault<T>. Otros servicios pueden consumir los fallos para generar alertas, registrar información o activar la compensación.

public class OrderFaultConsumer : IConsumer<Fault<OrderPlaced>>
{
    public Task Consume(ConsumeContext<Fault<OrderPlaced>> context)
    {
        // inspect context.Message.Exceptions
        return Task.CompletedTask;
    }
}

La idempotencia es importante

Como los reintentos y las reentregas pueden procesar un mensaje más de una vez, los consumidores deben ser idempotentes: gestionar el mismo mensaje dos veces no debe realizar un doble cobro ni duplicar el trabajo. Utilice identificadores únicos y comprobaciones de deduplicación.

Reprocesar desde la cola de errores

Después de corregir un error, puede mover los mensajes de la cola de errores a la cola original para volver a procesarlos y recuperar el trabajo que había fallado anteriormente.

Colas de mensajes no entregados y omitidos

MassTransit también utiliza una cola de omitidos (_skipped) para los mensajes que ningún consumidor tenía asignados, lo que le ayuda a detectar en producción los tipos de mensaje mal enrutados o inesperados.

Comprobación rápida

Pruebe la gestión de errores y los reintentos.

Repaso

MassTransit organiza la gestión de fallos por capas: reintento (inmediato o exponencial, limitado mediante Handle/Ignore) para interrupciones breves, reentrega para interrupciones prolongadas y una cola de errores para los mensajes cuyos intentos se han agotado, además de eventos Fault<T> para generar alertas. Como los mensajes pueden procesarse más de una vez, mantenga los consumidores idempotentes y vuelva a procesarlos desde la cola de errores después de corregir los errores.

Preguntas frecuentes

¿La lección «Gestión de errores y reintentos» es gratis?

Sí — el texto completo de «Gestión de errores y reintentos» 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 «Gestión de errores y reintentos»?

Gestione errores con reintentos y colas de mensajes no entregables. 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 4 de 4.

¿Cuánto tiempo toma la lección «Gestión de errores y reintentos»?

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