示例#1
0
 /// <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;
 }
示例#2
0
 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);
        }
示例#4
0
 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();
 }
示例#6
0
 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();
 }
示例#7
0
 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);
        }
示例#9
0
 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;
 }
示例#10
0
 public static bool Add(IJobExecutor jobExecutor)
 {
     if (jobExecutor != null)
     {
         psJobExecutors.Add(jobExecutor.GetType().Name, jobExecutor);
     }
     return(true);
 }
示例#11
0
        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;
        }
示例#12
0
 /// <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;
 }
示例#13
0
 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);
 }
示例#14
0
 public SingleThreadJobProcessor(IJobStorage jobStorage,
                                 IJobExecutor jobExecutor,
                                 ILogger <SingleThreadJobProcessor> logger)
 {
     _jobStorage  = jobStorage;
     _jobExecutor = jobExecutor;
     _logger      = logger;
 }
示例#15
0
        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);
        }
示例#16
0
 /// <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;
 }
示例#18
0
        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;
        }
示例#19
0
        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);
        }
示例#20
0
 /// <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);
     }
 }
示例#21
0
        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>();
        }
示例#22
0
        /// <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();
        }
示例#23
0
        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);
        }
示例#24
0
文件: JobQueue.cs 项目: vilvm88/dos
        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();
        }
示例#25
0
        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));
        }
示例#27
0
 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);
     }
 }
示例#28
0
 public OperationsController(IJobExecutor executor, IOptions <ServerSettings> settings, IEmailService emailService)
 {
     _executor     = executor;
     _validToken   = settings.Value.JobExecutorToken;
     _emailService = emailService;
 }
示例#29
0
 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));
 }