// POST api/Schedules public HttpResponseMessage Post(Job jobContext) { try { SchedulerWrapper.Wrapper.ScheduleJob(jobContext); return Request.CreateResponse(HttpStatusCode.Created); } catch (Exception ex) { return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ex); } }
static public void Push(Job context) { var factory = new ConnectionFactory() { HostName = context.Queue.Host }; using (var connection = factory.CreateConnection()) { using (var channel = connection.CreateModel()) { channel.QueueDeclare(context.Queue.Name, true, false, false, null); var body = Encoding.UTF8.GetBytes(context.Message.ToString()); var properties = channel.CreateBasicProperties(); properties.SetPersistent(true); channel.BasicPublish("", context.Queue.Name, properties, body); Log.Debug(string.Format("Pushed message {0} to queue {1}", context.Message.ToString(), context.Queue.Name)); Log.Info(string.Format("Pushed message to queue {0}", context.Queue.Name)); } } }
public void ScheduleJob(Job jobContext) { var jobData = SetJobDataMapFromContext(jobContext); IJobDetail job = JobBuilder.Create<QueueJob>() .WithIdentity(jobContext.Name) .SetJobData(jobData) .Build(); var triggerBuilder = TriggerBuilder.Create() .WithIdentity(jobContext.Name) .ForJob(jobContext.Name); if (!String.IsNullOrWhiteSpace(jobContext.Cron)) triggerBuilder.WithCronSchedule(jobContext.Cron); else triggerBuilder.StartNow(); var trigger = triggerBuilder.Build(); if (_scheduler.CheckExists(new JobKey(jobContext.Name))) _scheduler.DeleteJob(new JobKey(jobContext.Name)); _scheduler.ScheduleJob(job, trigger); }
private static JobDataMap SetJobDataMapFromContext(Job context) { if (context.Message != null && !string.IsNullOrWhiteSpace(context.Message.ToString()) && context.Message.ToString().Trim().StartsWith("{")) { context.Message = JsonConvert.SerializeObject(context.Message); } var jobData = new JobDataMap(); jobData.Put("JobContext", context); return jobData; }