Пример #1
0
        private void CheckHandlers(IJobProvider provider, IList <IJob> jobs, IList <Handler> handlers)
        {
            foreach (var job in jobs)
            {
                var handler = handlers.FirstOrDefault(e => e.Name == job.Name);
                if (handler == null && job.Enable && !job.ClassName.IsNullOrEmpty())
                {
                    XTrace.WriteLine("发现未知作业[{0}]@[{1}]", job.Name, job.ClassName);
                    try
                    {
                        // 实例化一个处理器
                        var type = Type.GetType(job.ClassName);
                        if (type != null)
                        {
                            handler = type.CreateInstance() as Handler;
                            if (handler != null)
                            {
                                XTrace.WriteLine("添加新作业[{0}]@[{1}]", job.Name, job.ClassName);

                                handler.Name     = job.Name;
                                handler.Schedule = this;
                                handler.Provider = provider;
                                handler.Log      = XTrace.Log;
                                handler.Start();

                                handlers.Add(handler);
                            }
                        }
                    }
                    catch { }
                }
            }
        }
Пример #2
0
        public WeekPlanService(
            IJobProvider jobProvider,
            IMemberService memberService,
            IGroupService groupService,
            IDayAssignService dayAssignService,
            IJobStatusLogService jobStatusLogService,
            IPathHelper pathHelper,
            IManagementDepartmentService managementDepartmentService,
            IJobService jobService,
            IAppSettingHelper appSettingHelper,
            IJobStatusService jobStatusService)
        {
            this.jobProvider                 = jobProvider;
            this.memberService               = memberService;
            this.groupService                = groupService;
            this.dayAssignService            = dayAssignService;
            this.jobStatusLogService         = jobStatusLogService;
            this.pathHelper                  = pathHelper;
            this.managementDepartmentService = managementDepartmentService;
            this.jobService                  = jobService;
            this.appSettingHelper            = appSettingHelper;
            this.jobStatusService            = jobStatusService;

            logger = LogManager.GetLogger("MoveExpiriedJobsLog");
        }
Пример #3
0
 public StreamHub(IJobProvider jobProvider,
                  IJobProcessor jobProcessor,
                  IJobBufferHandler buffer)
 {
     this.jobProvider  = jobProvider;
     this.jobProcessor = jobProcessor;
     this.buffer       = buffer;
 }
Пример #4
0
 public bool TryRegisterJobProvider(IJobProvider <TDef> jobProvider)
 {
     if (_registeredJobProviders.ContainsKey(jobProvider.InstanceId))
     {
         return(false);
     }
     _registeredJobProviders.Add(jobProvider.InstanceId, jobProvider);
     return(true);
 }
Пример #5
0
        /// <summary>构造函数</summary>
        public JobService()
        {
            this.configuration = MembershipConfigurationView.Instance.Configuration;

            // 创建对象构建器(Spring.NET)
            string springObjectFile = this.configuration.Keys["SpringObjectFile"].Value;

            SpringObjectBuilder objectBuilder = SpringObjectBuilder.Create(MembershipConfiguration.ApplicationName, springObjectFile);

            // ���������ṩ��
            this.provider = objectBuilder.GetObject <IJobProvider>(typeof(IJobProvider));
        }
Пример #6
0
 public YearlyPlanService(
     IJobProvider jobProvider,
     ICategoryService categoryService,
     IDayAssignProvider dayAssignProvider,
     IMemberService memberService,
     IJobAssignProvider jobAssignProvider)
 {
     this.jobProvider       = jobProvider;
     this.categoryService   = categoryService;
     this.dayAssignProvider = dayAssignProvider;
     this.memberService     = memberService;
     this.jobAssignProvider = jobAssignProvider;
 }
Пример #7
0
        public IEnumerable <IJobWorker <TDef> > GetWorker(IJobProvider <TDef> jobProvider)
        {
            var jobIds = new List <string>();

            foreach (var jobid in jobIds)
            {
                if (!_jobs.ContainsKey(jobid))
                {
                    throw new Exception("Worker found with JobInstanceId: " + jobid + " But no job matches id");
                }
                else
                {
                    foreach (var worker in _jobs[jobid].Workers)
                    {
                        yield return(worker);
                    }
                }
            }
        }
Пример #8
0
 public JobEngine(JobSetting setting, IMcJobExcute <T> worker, IJobProvider provider = null, ILog log = null)
 {
     lock (GetType())
     {
         if (!_isInitlize)
         {
             provider     = provider ?? new JobProvider();
             _lockFactory = provider.GetLockFactory(setting.ZkConnectionString, setting.SystemId);
             _log         = log;
             _queue       = provider.GetQueue <T>(setting.QueueConnectionString, setting.QueueName);
             _worker      = worker;
             _cacheClient = provider.GetCacheClient(setting.RedisConnection, setting.RedisDb);
             Task.Factory.StartNew(() =>
             {
                 _queue.OnReceive(ExcuteTask);
             }, TaskCreationOptions.LongRunning).ConfigureAwait(false);
             _isInitlize = true;
         }
     }
 }
Пример #9
0
 public OperationalTaskService(
     IMessageBus messageBus,
     ITaskIdGenerator taskIdGenerator,
     IJobAssignProvider jobAssignProvider,
     IDayAssignService dayAssignService,
     IJobProvider jobProvider,
     ICategoryService categoryService,
     IPathHelper pathHelper,
     IMemberService memberService,
     IJobStatusService jobStatusService,
     IJobService jobService)
 {
     this.messageBus        = messageBus;
     this.taskIdGenerator   = taskIdGenerator;
     this.jobAssignProvider = jobAssignProvider;
     this.dayAssignService  = dayAssignService;
     this.jobProvider       = jobProvider;
     this.categoryService   = categoryService;
     this.pathHelper        = pathHelper;
     this.memberService     = memberService;
     this.jobStatusService  = jobStatusService;
     this.jobService        = jobService;
 }
Пример #10
0
        /// <summary>开始</summary>
        public void Start()
        {
            // 如果没有指定工作者,则全局扫描
            var bs = Jobs.ToList();

            if (bs.Count == 0)
            {
                XTrace.WriteLine("没有可用工作者");
                return;
            }

            // 启动作业提供者,获取所有作业
            var prv = Provider;

            if (prv == null)
            {
                prv = Provider = new JobFileProvider();
            }
            if (prv.Schedule == null)
            {
                prv.Schedule = this;
            }
            prv.Start();

            var jobs = prv.GetJobs(bs.Select(e => e.Name).ToArray());

            if (jobs == null || jobs.Length == 0)
            {
                XTrace.WriteLine("没有可用作业");
                return;
            }

            // 输出日志
            var mode = $"定时{Period}秒";
            var msg  = $"启动任务调度引擎[{prv}],作业[{bs.Count}]项,模式:{mode}";

            XTrace.WriteLine(msg);

            // 设置日志
            foreach (var wrk in bs)
            {
                wrk.Schedule = this;
                wrk.Provider = prv;

                var job = wrk.Model = jobs.FirstOrDefault(e => e.Name == wrk.Name);
                if (job != null && job.Mode == 0)
                {
                    job.Mode = wrk.Mode;
                }

                wrk.Log = XTrace.Log;
                wrk.Start();
            }

            // 全部启动后再加入集合
            Jobs.Clear();
            Jobs.AddRange(bs);

            // 定时执行
            if (Period > 0)
            {
                _timer = new TimerX(Loop, null, 100, Period * 1000, "Job")
                {
                    Async = true
                }
            }
            ;
        }
Пример #11
0
        /// <summary>开始</summary>
        public void Start()
        {
            // 如果没有指定处理器,则全局扫描
            var bs = Jobs.ToList();

            if (bs.Count == 0)
            {
                XTrace.WriteLine("没有可用处理器");
                return;
            }

            // 启动作业提供者,获取所有作业
            var prv = Provider;

            if (prv == null)
            {
                prv = Provider = new FileJobProvider();
            }
            if (prv.Schedule == null)
            {
                prv.Schedule = this;
            }
            prv.Start();

            var jobs = prv.GetJobs();

            if (jobs == null || jobs.Length == 0)
            {
                XTrace.WriteLine("没有可用作业");
                return;
            }

            // 输出日志
            var mode = $"定时{Period}秒";
            var msg  = $"启动任务调度引擎[{prv}],作业[{bs.Count}]项,模式:{mode}";

            XTrace.WriteLine(msg);

            // 设置日志
            foreach (var handler in bs)
            {
                handler.Schedule = this;
                handler.Provider = prv;

                var job = handler.Job = jobs.FirstOrDefault(e => e.Name == handler.Name);
                if (job != null && job.Mode == 0)
                {
                    job.Mode = handler.Mode;
                }

                handler.Log = XTrace.Log;
                handler.Start();
            }

            //// 全部启动后再加入集合
            //Jobs.Clear();
            //Jobs.AddRange(bs);

            // 定时执行
            if (Period > 0)
            {
                _timer = new TimerX(Loop, null, 100, Period * 1000, "Job")
                {
                    Async = true
                }
            }
            ;
        }
Пример #12
0
        /// <summary>开始</summary>
        public void Start()
        {
            // 检查本地添加的处理器
            var hs = Handlers;

            if (hs.Count == 0)
            {
                throw new ArgumentNullException(nameof(Handlers), "没有可用处理器");
            }

            // 启动作业提供者
            var prv = Provider;

            if (prv == null)
            {
                prv = Provider = new FileJobProvider();
            }
            if (prv.Schedule == null)
            {
                prv.Schedule = this;
            }
            prv.Start();

            // 获取本应用在调度中心管理的所有作业
            var jobs = prv.GetJobs();

            if (jobs == null || jobs.Length == 0)
            {
                throw new Exception("调度中心没有可用作业");
            }

            // 输出日志
            var msg = $"启动任务调度引擎[{prv}],作业[{hs.Count}]项,定时{Period}秒";

            XTrace.WriteLine(msg);

            // 设置日志
            foreach (var handler in hs)
            {
                handler.Schedule = this;
                handler.Provider = prv;

                // 查找作业参数,分配给处理器
                var job = jobs.FirstOrDefault(e => e.Name == handler.Name);
                if (job != null && job.Mode == 0)
                {
                    job.Mode = handler.Mode;
                }
                handler.Job = job;

                handler.Log = XTrace.Log;
                handler.Start();
            }

            // 定时执行
            if (Period > 0)
            {
                _timer = new TimerX(Loop, null, 100, Period * 1000, "Job")
                {
                    Async = true
                }
            }
            ;
        }