Example #1
0
        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;
            }
        }
Example #2
0
 /// <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
     }));
 }
Example #3
0
        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);
        }
Example #4
0
        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
            });
        }