es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Puede un consumidor regular de MassTransit extender el tiempo de espera antes de reintentar el mensaje?

Actualmente, me encuentro en una situación en la que un evento necesita actualizar una cierta cantidad de registros en la base de datos. Por lo general, esto no lleva más de unos segundos, pero puede haber escenarios en los que pueda tardar más de 1 minuto. En este escenario, el consumidor vuelve a tomar el mismo mensaje después de 30 segundos y lo reintenta.

Me preguntaba si puedo aumentar ese tiempo de espera tal vez hasta 5 minutos para esos escenarios raros sin usar JobConsumers.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Hay una forma de aumentar el tiempo para reintentar los mensajes sin usar JobConsumers. En MassTransit, se puede utilizar el método UseMessageRetry para configurar los reintentos de mensajes fallidos. Por defecto, este método establece el intervalo de reintentos en 5 segundos.

    Para aumentar el intervalo de reintentos, se puede pasar una instancia de RetryPolicy al método UseMessageRetry. La clase RetryPolicy tiene una propiedad llamada IntervalFunction que se puede configurar con un delegado que devuelve un valor de tipo TimeSpan. Este delegado se puede utilizar para calcular el intervalo de reintentos según el número de reintentos que ya se hayan realizado.

    Por ejemplo, el siguiente código establece el intervalo de reintentos inicial en 30 segundos y lo aumenta en 30 segundos para cada reintentos posterior, hasta un máximo de 5 minutos:

    configurator.UseMessageRetry(r => r.Incremental(5, TimeSpan.FromSeconds(30), TimeSpan.FromMinutes(5)));
    

    Con esta configuración, si un mensaje falla y se reintenta, el intervalo de reintentos comenzará en 30 segundos y aumentará en 30 segundos para cada reintentos, hasta un máximo de 5 minutos. Esto debería dar suficiente tiempo para los escenarios raros en los que la actualización de registros en la base de datos tarde más de lo habitual.

Comments are closed.