Повторяющееся задание Hangfire, время следующего выполнения пусто

Этот вопрос может показаться довольно глупым, так что извините за это. Я новичок в Hangfire.

Я использую Hangfire (с MongoDB) в своем основном приложении .net, и все в порядке!

Но вчера я получил следующие ошибки для моих повторяющихся заданий.

System.InvalidOperationException: 
Recurring job can't be scheduled, see inner exception for details. 
---> Hangfire.Common.JobLoadException: Could not load the job. See inner exception for the details. 
---> System.TypeLoadException: 
Could not load type 'AirQualityControl.Core.Models.Domain.AirMonitoringStation' from assembly 'AirQualityControl.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.   at System.Reflection.RuntimeAssembly.GetType(QCallAssembly assembly, String name, Boolean throwOnError, Boolean ignoreCase, ObjectHandleOnStack type, ObjectHandleOnStack keepAlive, ObjectHandleOnStack assemblyLoadContext)   at System.Reflection.RuntimeAssembly.GetType(String name, Boolean throwOnError, Boolean ignoreCase)   at System.TypeNameParser.ResolveType(Assembly assembly, String[] names, Func`4 typeResolver, Boolean throwOnError, Boolean ignoreCase, StackCrawlMark& stackMark)   at System.TypeNameParser.ConstructType(Func`2 assemblyResolver, Func`4 typeResolver, Boolean throwOnError, Boolean ignoreCase, StackCrawlMark& stackMark)   at System.TypeNameParser.GetType(String typeName, Func`2 assemblyResolver, Func`4 typeResolver, Boolean throwOnError, Boolean ignoreCase, StackCrawlMark& stackMark)   at System.Type.GetType(String typeName, Func`2 assemblyResolver, Func`4 typeResolver, Boolean throwOnError)   at Hangfire.Common.TypeHelper.DefaultTypeResolver(String typeName)   at System.Linq.Enumerable.SelectArrayIterator`2.ToArray()   at Hangfire.Storage.InvocationData.DeserializeJob()   --- End of inner exception stack trace ---   at Hangfire.Storage.InvocationData.DeserializeJob()   at Hangfire.RecurringJobEntity..ctor(String recurringJobId, IDictionary`2 recurringJob, ITimeZoneResolver timeZoneResolver, DateTime now)   --- End of inner exception stack trace ---   at Hangfire.Server.RecurringJobScheduler.ScheduleRecurringJob(BackgroundProcessContext context, IStorageConnection connection, String recurringJobId, RecurringJobEntity recurringJob, DateTime now)
enter code here

Это полностью моя вина 🤦‍♀️ , потому что я случайно изменил пространство имен типа. Я возвращаю эти изменения в предыдущее состояние.

Но меня беспокоит текущее состояние рабочих мест:

Как вы можете видеть, следующее выполнение пусто.

Обычно он содержит дату и время, когда задание будет запущено в следующий раз.

Я так предполагаю, что они не будут обедать по выражению CRON?

Нужно ли как-то вручную настраивать эти задания?

Или они снова будут работать сегодня в 19:00 по выражению CRON?

Большое спасибо за вашу помощь и хорошего дня!

Какова конфигурация максимального количества повторных попыток в hangfire до того, как задание будет установлено как неудачное?

Nikhil Patil 21.12.2020 11:51

@NikhilPatil Я не отменяю этот параметр. Поэтому я полагаю, что у него есть значение по умолчанию, равное 10, согласно исходному коду. github.com/HangfireIO/Hangfire/blob/master/src/Hangfire.Core‌​/…

Qwerty Qwerty 21.12.2020 12:52

Я не уверен, почему следующее время выполнения пусто, потому что ваша работа не удалась только 5 раз. Откуда вы получаете следующее время выполнения? Я не вижу ни одного поля в БД, в котором хранится это значение. У вас есть доступ к панели управления hangfire? Может там проверишь?

Nikhil Patil 21.12.2020 12:58

@NikhilPatil Я обновил вопрос, добавив более подробную информацию, если быть точнее. Надеюсь, вы найдете это полезным

Qwerty Qwerty 21.12.2020 13:05

Вверх. все еще есть такая же проблема

CherryBlossom 27.05.2022 06:10

@CherryBlossom, я опубликовал ответ, который пытается подробно описать ответ. Надеюсь, вы найдете это полезным

Qwerty Qwerty 28.05.2022 19:54
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
6
787
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Обновление: для тех, кто не знаком с Hangfire и сталкивается с той же проблемой.

Каждое задание в Hangfire имеет определенное количество повторных попыток. Это может быть глобальный параметр или его можно изменить с помощью атрибута AutomaticRetry для каждого задания.

По умолчанию каждое задание имеет 10 повторных попыток.

Если количество повторных попыток превысило максимальное количество, задание будет перемещено в Неудачное состояние (с сообщением журнала ошибок), и вы сможете повторите попытку вручную.

Кроме того, важно отметить, что мы можем увидеть Hangfire с его работой в качестве конечного автомата.

Это изображение имеет только иллюстративную цель. Это не точный список состояний задания Hangfire.

Это означает, что каждая работа должна иметь определенное состояние. Некоторые из них терминальные, а некоторые нет.

Здесь вы можете найти полный список состояний заданий Hangfire.

Согласно документации

Сбой — определяет промежуточное состояние фонового задания, когда его обработка была прервана исключительным случаем, и это проблема разработчика. Ответственность за решение, что делать с ним дальше.

Это означает, что задание не будет запускаться автоматически, и вам следует запустить его вручную или избавиться от него.

Другие вопросы по теме