job backgroundjobserveroptions hangfire

backgroundjobserveroptions - Deshabilitar la re-cola de Failed Hangfire BackgroundJob



hangfire server (4)

¿Hay alguna forma de deshabilitar la puesta en cola de un error en el Hangfire BackgroundJob?

No queremos que los trabajos fallidos se ejecuten de nuevo, ya que esto podría causar problemas.


Me encontré con un problema similar y pude encontrar una solución. Usar un filtro global no era una opción para mí. Estoy usando el núcleo de asp.net y tengo un simple trabajo de fondo y olvido. Por alguna razón, el AutomaticRetryAttribute estaba siendo ignorado. Resultó que la forma en que estaba agregando el trabajo fue la clave de mi solución. Tenía un código similar en mi aplicación que estaba causando el problema:

BackgroundJob.Enqueue<IMyJobService>(js => js.DoWork());

En mi implementación de IMyJobService tenía el siguiente código:

[AutomaticRetry(Attempts = 0)] public void DoWork() { // I''m working hard here }

La solución que se me ocurrió fue:

public MyTestController { private readonly IMyJobService _myJobService; public MyTestClass(IMyJobService myJobService) { _myJobService = myJobService; } public ActionResult Work() { BackgroundJob.Enqueue(() => _myJobService.DoWork()); return Ok(); } }

En lugar de confiar en BackgroundJob.Enqueue<T> para inyectar mi implementación de IMyJobService , lo hago yo mismo. Eso es básicamente eso. Espero que esto ayude a alguien.


Puede anotar el método para ejecutar en segundo plano con el siguiente atributo:

[AutomaticRetry(Attempts = 0)]

O configurarlo globalmente:

GlobalJobFilters.Filters.Add(new AutomaticRetryAttribute { Attempts = 0 });


Resuelto, usando [AutomaticRetry (intentos = 0)]


Importante si utiliza el contenedor DI con una interfaz, debe poner el atributo en la definición de la interfaz

public interface IDataUpdater { [Hangfire.AutomaticRetry(Attempts = 0, OnAttemptsExceeded = AttemptsExceededAction.Delete)] void UpdateData(); }

Hacer cola el trabajo de esta manera

Hangfire.RecurringJob.AddOrUpdate<IDataUpdater>(updater => updater.UpdateData(), Cron.Hourly);

Pruébelo simplemente lanzando cualquier excepción anterior dentro de su implementación. Si lo has hecho bien, lo verás en el historial de trabajo en ''eliminado''.