public void StartDefaultJob(RecurringJobRequest request) { try { var existingJobs = Hangfire.JobStorage.Current.GetConnection().GetRecurringJobs(); log.LogInformation($"Registered jobs: {existingJobs?.Where(obj => obj.Job.Args.Any(arg => arg.GetType() == typeof(JobRequest)))?.Select((j => j.Job.Method.Name)).Aggregate(string.Empty,(i, j) => i + ';' + j)}"); if (existingJobs.Where(obj => obj.Job.Args.Any(arg => arg.GetType() == typeof(JobRequest))).Any(obj => ((JobRequest)obj.Job.Args.First(arg => arg.GetType() == typeof(JobRequest))).JobUid == request.JobUid)) { log.LogInformation($"Job with uid {request.JobUid} has been registered - skipping registration."); return; } log.LogInformation($"Instantiating a new job {JsonConvert.SerializeObject(request)}"); jobRunner.QueueHangfireRecurringJob(request); } catch (Exception ex) { log.LogCritical(ex, $"Something wrong wrong with jobs - please delete old recurring jobs"); // throw; } }
/// <summary> /// 添加周期任务 /// </summary> /// <param name="request"></param> public static async Task <HangfirJobResult> AddRecurringJobAsync(RecurringJobRequest request) { return(await HangfireJobClient.AddRecurringJobAsync(JobConfig.ServerUrl, new RecurringJob() { Cron = request.Cron, JobName = request.JobEnglishName, Method = request.HttpMethod.ToString(), Url = $"{JobConfig.DomainName}{request.Api}", Timeout = request.Timeout, EnableRetry = request.EnableRetry, ContentType = request.ContentType, RetryDelaysInSeconds = string.Join(',', request.RetryDelaysInSeconds), RetryTimes = request.RetryTimes }, new HangfireServerPostOption() { BasicUserName = JobConfig.BasicUserName, BasicPassword = JobConfig.BasicUserPwd })); }
public string QueueHangfireRecurringJob(RecurringJobRequest request) { var recurringJobId = Guid.NewGuid().ToString(); try { if (!string.IsNullOrEmpty(request.Schedule)) { request.Validate(); log.LogDebug($"Job request validated, starting a new job {JsonConvert.SerializeObject(request)}"); RecurringJob.AddOrUpdate(recurringJobId, () => RunHangfireJob(jobManager.GetJobName(request.JobUid), request, false, null, null), request.Schedule, queue: QUEUE_NAME); } } catch (Exception ex) { log.LogError(ex, $"Can't start scheduled job as the request is invalid"); return(""); } return(recurringJobId); }
public ScheduleJobResult RunRecurringJob([FromBody] RecurringJobRequest request) { Log.LogInformation($"{nameof(RunRecurringJob)}: {JsonConvert.SerializeObject(request)}"); request.Validate(); string hangfireJobId; try { hangfireJobId = RecurringJobRunner.QueueHangfireRecurringJob(request); } catch (Exception e) { Log.LogError(e, $"Queue VSS job failed with exception {e.Message}"); throw; } //Hangfire will substitute a PerformContext automatically return(new ScheduleJobResult { JobId = hangfireJobId }); }