示例#1
0
        public async Task BroadcastAsync(IEnumerable <CronJobDescription> jobs, CancellationToken cancellationToken)
        {
            var payload = new CronJobBroadcast
            {
                Application = _environment.ApplicationName,
                Environment = _environment.EnvironmentName,
                Jobs        = jobs
            };

            var json = JsonSerializer.Serialize(payload);
            var res  = await _httpClient.PostAsync(
                "",
                new StringContent(json, Encoding.UTF8, MediaTypeNames.Application.Json),
                cancellationToken : cancellationToken
                );

            res.EnsureSuccessStatusCode();
        }
示例#2
0
        public void Register(CronJobBroadcast payload)
        {
            string MakeKey(CronJobDescription j, int i) => $"{payload.Application}@{payload.Environment}.{j.Name}#{i}";

            var app = $"{payload.Application}@{payload.Environment}";

            _logger.LogDebug("Looking for registered jobs for {Application}", app);
            var existingJobs = _jobStorage.GetConnection().GetRecurringJobs()
                               .Where(j => j.Id.StartsWith(app))
                               .ToList();

            _logger.LogDebug($"Found {existingJobs.Count} jobs. Replacing with new ones.");

            foreach (var job in existingJobs)
            {
                _jobManager.RemoveIfExists(job.Id);
            }

            var jobs = payload.Jobs.ToList();

            foreach (var job in jobs)
            {
                _logger.LogDebug("Registering {Job} for {Application}", job, payload.Application);
                for (var i = 0; i < job.CronExpressions.Count; i++)
                {
                    var cron   = job.CronExpressions[i];
                    var jobKey = MakeKey(job, i);
                    _jobManager.AddOrUpdate <CronJobTriggerer>(
                        jobKey,
                        t => t.Trigger(job),
                        cron,
                        TimeZoneInfo.Local
                        );
                }
            }

            _logger.LogInformation($"Registered {jobs.Count} jobs for {{Application}}.", app);
        }