Задать сбой задания при использовании Hangfire с ASP.NET?
У меня есть приложение ASP.NET, которое отправляет электронные письма всякий раз, когда пользователь регистрируется на веб-сайте. Я использую Hangfire для управления заданиями и почтовыми отправлениями для отправки электронных писем.
Все отлично работает, но вот в чем дело:
Я хочу, чтобы суперпользователь изменил, сколько раз приложение может отправить электронное письмо перед удалением задания.
Вот мой код
public static void WelcomeUser(DBContexts.Notifications not)
{
try{
var viewsPath = Path.GetFullPath(HostingEnvironment.MapPath(@"~/Views/Emails"));
var engines = new ViewEngineCollection();
engines.Add(new FileSystemRazorViewEngine(viewsPath));
Postal.EmailService service = new Postal.EmailService(engines);
WelcomeUserMail welcomeUserMail = new WelcomeUserMail();
welcomeUserMail.To = not.ReceiverEmail;
welcomeUserMail.UserEmail = not.ReceiverEmail;
welcomeUserMail.From = BaseNotification.GetEmailFrom();
service.Send(welcomeUserMail);
}
catch(Exception e)
{
DBContexts.DBModel dbModel = new DBModel();
DBContexts.Notifications notificacionBD = dbModel.Notifications.Find(not.NotificationID);
notificacionBD.Status = false;
notificacionBD.Timestamp = DateTime.Now;
notificacionBD.Error = e.Message;
int numberOfRetriesAllowed = ParameterHelper.getNumberOfRetriesAllowed();
if (notificacionBD.Retries > numberOfRetriesAllowed)
{
//In this case Hangfire won't put this job in the failed section but rather in the processed section.
dbModel.SaveChanges();
}
else
{
notificacionBD.Retries++;
dbModel.SaveChanges();
throw new Exception(e.Message);
}
}
}
1 ответ
Почему бы просто не добавить атрибуты для автоматической обработки?
[AutomaticRetry(Attempts = 10, LogEvents = true, OnAttemptsExceeded = AttemptsExceededAction.Delete)]
public void MyTask(){
//doing stuff
}
Или вы могли бы просто сделать свой собственный атрибут, который имитирует класс AutommaticRetryAttribute, но вы обрабатываете его так, как хотите?