/// <summary> /// 构造函数 /// </summary> /// <param name="triggerJobName">触发器名称</param> /// <param name="dueTime">到期开始执行时间</param> /// <param name="periodTime">间隔时间</param> /// <param name="jobExcutor">任务执行者</param> protected TimerTriggerJob(string triggerJobName, TimeSpan dueTime, TimeSpan periodTime, IJobExecutor jobExcutor) : base(triggerJobName) { _dueTime = dueTime; _periodTime = periodTime; JobExcutor = jobExcutor; }
public OperationsController(IJobExecutor executor, IOptions <ServerSettings> settings, IEmailService emailService, IWebHostEnvironment env) { _executor = executor; _validToken = settings.Value.JobExecutorToken; _emailService = emailService; _env = env; }
static void ExecuteJob(Object jobExecutionContextObject) { JobExecutionContext jobExecutionContext = (JobExecutionContext)jobExecutionContextObject; JobContext jobContext = jobExecutionContext.JobContext; Debug.WriteLine(DateTime.Now + " : " + jobContext.JobData.Id + " start thread. Queue = " + jobExecutionContext.ExecutionQueue.Id); try { IJobExecutorFactory jobExecutorFactory = new JobExecutorFactory(); IJobExecutor jobExecutor = jobExecutorFactory.GetJobExecutor(jobContext); jobExecutor.ExecuteJob(jobContext); TimedThreadExecutionQueue queue = (TimedThreadExecutionQueue)jobExecutionContext.ExecutionQueue; lock (queue.workers) { queue.workers.Remove(jobExecutionContext); } var jobFinishedEvent = queue.JobFinishedExecuting; if (jobFinishedEvent != null) { jobFinishedEvent(queue, new JobFinishedExecutingEventArgs(jobContext.JobData.Id)); } } catch (ThreadAbortException) { string message = string.Format("Job has exceeded the ShutdownTimeout and was terminated abnormally.", jobContext.JobData.Id); jobContext.JobManager.JobStore.SetJobStatus(jobContext.JobData.Id, JobStatus.Executing, JobStatus.ShutdownTimeout, message); } Debug.WriteLine(DateTime.Now + " : " + jobContext.JobData.Id + " end thread. Queue = " + jobExecutionContext.ExecutionQueue.Id); }
public ThreadPoolExecutor(CancellationToken token, ConcurrentQueue <IOddJobWithMetadata> jobQueue, IJobExecutor jobExecutor, ThreadPoolJobStateHandler jobStateHandler, ThreadPoolCoordinator coordinator) { _token = token; _jobQueue = jobQueue; _jobExecutor = jobExecutor; _coordinator = coordinator; }
public PrintService(string backupFilePath) { backupFileLocation = backupFilePath; LoadQueueFromFile(); executor = new PrintExecutor(queue); executor.Start(); }
public BatchEngine(IBatchStore store, IDependencyResolver resolver = null, ILogger logger = null, BatchSettings batchSettings = null) { _store = store; _jobExecutor = new DependencyInjectionJobExecutor(resolver); _logger = logger; _settings = batchSettings ?? new BatchSettings(); }
public ElsaJobsScheduler(IDataRepository dataRepository, ILog log, IScheduledJobsRepository jobsRepository, IJobExecutor executor) : base(dataRepository, TimeSpan.FromSeconds(10)) { m_log = log; m_jobsRepository = jobsRepository; m_executor = executor; }
static void ExecuteJob(Object jobExecutionContextObject) { JobExecutionContext jobExecutionContext = (JobExecutionContext)jobExecutionContextObject; JobContext jobContext = jobExecutionContext.JobContext; Debug.WriteLine(DateTime.Now.ToString("dd/mm/yyyy HH:mm:ss:fffffff") + " : " + jobContext.JobData.Id + " ExecuteJob Enter. Queue = " + jobExecutionContext.ExecutionQueue.Id); try { IJobExecutorFactory jobExecutorFactory = new JobExecutorFactory(); IJobExecutor jobExecutor = jobExecutorFactory.GetJobExecutor(jobContext); jobExecutor.ExecuteJob(jobContext); ThreadPoolExecutionQueue queue = (ThreadPoolExecutionQueue)jobExecutionContext.ExecutionQueue; lock (queue.activeThreads) { queue.activeThreads = (uint)queue.activeThreads - 1; var jobFinishedEvent = queue.JobFinishedExecuting; if (jobFinishedEvent != null) { jobFinishedEvent(queue, new JobFinishedExecutingEventArgs(jobContext.JobData.Id)); } } } catch (ThreadAbortException) { string message = string.Format("Job has exceeded the ShutdownTimeout and was terminated abnormally.", jobContext.JobData.Id); jobContext.JobManager.JobStore.SetJobStatuses(new long[] { jobContext.JobData.Id }, JobStatus.Executing, JobStatus.ShutdownTimeout, message); } Debug.WriteLine(DateTime.Now.ToString("dd/mm/yyyy HH:mm:ss:fffffff") + " : " + jobContext.JobData.Id + " ExecuteJob Exit. Queue = " + jobExecutionContext.ExecutionQueue.Id); }
public ScheduledJobsController(IWebSession webSession, ILog log, IScheduledJobsRepository jobsRepository, IJobExecutor executor, ICache cache, ISession session) : base(webSession, log) { m_jobsRepository = jobsRepository; m_executor = executor; m_cache = cache; m_session = session; }
public static bool Add(IJobExecutor jobExecutor) { if (jobExecutor != null) { psJobExecutors.Add(jobExecutor.GetType().Name, jobExecutor); } return(true); }
public static void Init(IJobRepository repository, IJobExecutor executor, IJobLogger logger) { Repository = repository ?? throw new ArgumentNullException(nameof(repository)); Executor = executor ?? throw new ArgumentNullException(nameof(executor)); Logger = logger; IsInit = true; }
/// <summary> /// 构造函数 /// </summary> /// <param name="dueTime">到期执行时间</param> /// <param name="periodTime">间隔时间</param> /// <param name="jobExcutor">任务执行者</param> protected BaseJobTrigger(TimeSpan dueTime, TimeSpan periodTime, IJobExecutor jobExcutor) { _dueTime = dueTime; _periodTime = periodTime; _jobExcutor = jobExcutor; }
public RabbitMQSubscription(LazyInitializer <IModel> Channel, IJobExecutor executor) { this.Channel = Channel; this.topics = new ConcurrentDictionary <string, bool>(); this.executor = executor; this.declareQueueJobKey = Guid.NewGuid().ToString(); this.executor.AddJob(DeclareQueueAndRegisterConsumer, key: declareQueueJobKey); }
public SingleThreadJobProcessor(IJobStorage jobStorage, IJobExecutor jobExecutor, ILogger <SingleThreadJobProcessor> logger) { _jobStorage = jobStorage; _jobExecutor = jobExecutor; _logger = logger; }
public void DetermineSchedule(DateTimeOffset now, IJobExecutor executor, JobSchedule schedule) { // Make sure that all existing jobs are schedules Jobs.Each(x => x.Initialize(now, executor, schedule)); var types = Jobs.Select(x => x.JobType).ToArray(); schedule.RemoveObsoleteJobs(types); }
/// <summary> /// 构造函数 /// </summary> /// <param name="dueTime">到期执行时间</param> /// <param name="periodTime">间隔时间</param> /// <param name="jobExcutor">任务执行者</param> protected BaseJobTrigger(TimeSpan dueTime, TimeSpan periodTime, IJobExecutor jobExcutor, ILogger <BaseJobTrigger> logger) { _dueTime = dueTime; _periodTime = periodTime; _jobExcutor = jobExcutor; _logger = logger; }
public OperationsController(IJobExecutor executor, IOptions <ServerSettings> settings, IEmailService emailService, IWebHostEnvironment env, IConfiguration configuration, IMemoryCache memoryCache) { _executor = executor; _validToken = settings.Value.JobExecutorToken; _emailService = emailService; _env = env; _configuration = configuration; _cache = memoryCache; }
public RabbitMQPubSub(ISettingsProvider settingsProvider, IJobExecutor executor = null) { this.settingsProvider = settingsProvider; this.subscriptions = new ConcurrentBag <RabbitMQSubscription>(); this.connection = new LazyInitializer <IConnection>(CreateConnection); this.channel = new LazyInitializer <IModel>(() => connection.Value.CreateModel()); this.executor = executor ?? new PubSubJobsExecutor(this); // Ensure this is called explicitly on unload since Rabbit does not take care of that AppDomain.CurrentDomain.DomainUnload += OnAppDomainUnload; }
void IScheduledJob.Initialize(DateTimeOffset now, IJobExecutor executor, JobSchedule schedule) { var status = schedule.Find(JobType); LastExecution = status.LastExecution; var next = Scheduler.ScheduleNextTime(now, LastExecution); schedule.Schedule(JobType, next); executor.Schedule(this, next); }
/// <summary> /// 构造函数 /// </summary> /// <param name="dueTime">到期执行时间</param> /// <param name="periodTime">间隔时间</param> /// <param name="jobExcutor">任务执行者</param> protected BaseJobTrigger(TimeSpan dueTime, TimeSpan periodTime, IJobExecutor jobExcutor, bool cacheExcutor = false) { _dueTime = dueTime; _periodTime = periodTime; _jobExcutor = jobExcutor; if (cacheExcutor) { JobMananger.Add(jobExcutor); } }
public JobExecutorTests() { var services = new ServiceCollection(); services.AddSingleton <IJobStorage>(new MemoryJobStorage(new NullLogger <MemoryJobStorage>(), null)); services.AddSingleton <IJobExecutor>(x => new JobExecutor(x.GetRequiredService <IServiceScopeFactory>(), new NullLogger <JobExecutor>(), x.GetRequiredService <IJobStorage>())); services.AddTransient <TestJob>(); var provider = services.BuildServiceProvider(); _jobStorage = provider.GetRequiredService <IJobStorage>(); _jobExecutor = provider.GetRequiredService <IJobExecutor>(); }
/// <summary> /// Initializes a new instance of the <see cref="JobbrServer"/> class. /// </summary> public JobbrServer(IJobScheduler scheduler, IJobExecutor jobExecutor, IJobStorageProvider jobStorageProvider, List <IJobbrComponent> components, MessageDispatcher messageDispatcher, ConfigurationManager configurationManager, RegistryBuilder registryBuilder) { Logger.Debug("A new instance of a a JobbrServer has been created."); this.scheduler = scheduler; this.executor = jobExecutor; this.components = components; this.configurationManager = configurationManager; this.registryBuilder = registryBuilder; this.jobStorageProvider = jobStorageProvider; messageDispatcher.WireUp(); }
public DefaultScheduler(IJobbrRepository repository, IJobExecutor executor, InstantJobRunPlaner instantJobRunPlaner, ScheduledJobRunPlaner scheduledJobRunPlaner, RecurringJobRunPlaner recurringJobRunPlaner, DefaultSchedulerConfiguration configuration, IPeriodicTimer periodicTimer, IDateTimeProvider dateTimeProvider) { this.repository = repository; this.executor = executor; this.instantJobRunPlaner = instantJobRunPlaner; this.scheduledJobRunPlaner = scheduledJobRunPlaner; this.recurringJobRunPlaner = recurringJobRunPlaner; this.configuration = configuration; this.periodicTimer = periodicTimer; this.dateTimeProvider = dateTimeProvider; this.periodicTimer.Setup(this.EvaluateRecurringTriggers); }
public JobQueue( QueueOptions options, IJobRepository repository, IJobExecutor executor, IJobLogger logger = null ) { _options = options; _repository = repository; _executor = executor; _logger = logger; _workers = Enumerable.Range(0, options.WorkersNumber) .Select(x => new JobWorker(this, _logger, _options.ExecutePeriod)) .ToArray(); }
static JobScheduler() { _isInit = Global.IsInit; if (!_isInit) return; _options = Global.Configuration.Options; _repository = Global.Repository; _executor = Global.Executor; _logger = Global.Logger; _repository?.SetLogger(_logger); _queues = _options.Queues .Select(x => new JobQueue(x, _repository, _executor, _logger)) .ToDictionary(x => x.Name); }
public JobManager( IJobStore jobStore, IJobExecutor jobExecutor, ITypeFilterParser typeFilterParser, IOptions <JobConfiguration> jobConfiguration, IOptions <FilterConfiguration> filterConfiguration, ILogger <JobManager> logger) { EnsureArg.IsNotNull(jobConfiguration, nameof(jobConfiguration)); EnsureArg.IsNotNull(filterConfiguration, nameof(filterConfiguration)); _jobConfiguration = jobConfiguration.Value; _filterConfiguration = filterConfiguration.Value; _jobStore = EnsureArg.IsNotNull(jobStore, nameof(jobStore)); _jobExecutor = EnsureArg.IsNotNull(jobExecutor, nameof(jobExecutor)); _typeFilterParser = EnsureArg.IsNotNull(typeFilterParser, nameof(typeFilterParser)); _logger = EnsureArg.IsNotNull(logger, nameof(logger)); }
public bool StartJob(string jobName, IJobExecutor handler, string cron) { lock (joblocker) { var existjob = Jobs.Exists(x => x.JobName == jobName); if (existjob) { return(false); } //string InnerJobId = Guid.NewGuid().ToString(); JobDetailImpl jobdetail = new JobDetailImpl(jobName, typeof(RuanalInnerJob)); jobdetail.Description = "内部调度任务"; Quartz.ITrigger triger = null; var isrunonce = cron.ToLower() == "runonce"; if (isrunonce) { var ttriger = new Quartz.Impl.Triggers.SimpleTriggerImpl("trigger_" + jobName); ttriger.RepeatCount = 0; ttriger.RepeatInterval = TimeSpan.FromSeconds(1); triger = ttriger; } else { var ttriger = new Quartz.Impl.Triggers.CronTriggerImpl("trigger_" + jobName); ttriger.CronExpressionString = cron; triger = ttriger; } JobContext jobitem = new JobContext() { // InnerJobId = InnerJobId, IsRunOnce = isrunonce, JobName = jobName, JobDetail = jobdetail, LastRunTime = null, OnInvoke = handler }; jobitem.Triggers.Add(triger); Jobs.Add(jobitem); Scheduler.ScheduleJob(jobdetail, triger); return(true); } }
public OperationsController(IJobExecutor executor, IOptions <ServerSettings> settings, IEmailService emailService) { _executor = executor; _validToken = settings.Value.JobExecutorToken; _emailService = emailService; }
public TestingBatchEngine(ITestingBatchStore store, IDateSimulationService dateService, IDependencyResolver resolver = null) { _store = store; _dateService = dateService; _jobExecutor = new DependencyInjectionJobExecutor(resolver); }
public ICache GetImplementation(ISettingsProvider provider, IJobExecutor executor, string cacheInstanceKey = null) { return(new RabbitMQPubSubCache(provider, executor, cacheInstanceKey)); }