Ejemplo n.º 1
0
        public bool Stop(long taskid)
        {
            NodeTaskRuntimeInfo nodetask = TaskPool.Instance().Get(taskid.ToString());

            if (nodetask == null)
            {
                LogHelper.WriteInfo("" + taskid + "任务没有在运行");
                return(false);
            }
            if (Dispose(taskid, nodetask))
            {
                try
                {
                    TaskDal   taskdal = new TaskDal();
                    TaskModel model   = taskdal.GetById(GlobalConfig.TaskDataBaseConnectString, taskid.ToString());
                    model.TaskState    = 0;
                    model.TaskStopTime = DateTime.Now;
                    taskdal.EditTask(GlobalConfig.TaskDataBaseConnectString, model);
                    return(true);
                }
                catch (Exception ex)
                {
                    LogHelper.WriteError(ex);
                    return(false);
                }
            }
            return(false);
        }
Ejemplo n.º 2
0
        public static Trigger Create(NodeTaskRuntimeInfo nodetask)
        {
            CronTrigger triger = new CronTrigger(nodetask.TaskModel.Id.ToString(), nodetask.TaskModel.CategoryId.ToString());

            triger.CronExpressionString = nodetask.TaskModel.TaskCron;
            return(triger);
        }
Ejemplo n.º 3
0
 public bool Dispose(long taskid, NodeTaskRuntimeInfo nodetask)
 {
     if (nodetask != null && nodetask.Domain != null)
     {
         try
         {
             TaskPool.Instance().Remove(taskid.ToString());
             AppDomain.Unload(nodetask.Domain);
             return(true);
         }
         catch (Exception ex)
         {
             LogHelper.WriteError(ex);
             return(false);
         }
     }
     return(false);
 }
Ejemplo n.º 4
0
        public bool Remove(string taskid)
        {
            lock (lock_task)
            {
                if (TaskRuntimePool.ContainsKey(taskid))
                {
                    NodeTaskRuntimeInfo nodetask = TaskRuntimePool[taskid];
                    _ische.PauseTrigger(nodetask.TaskModel.Id.ToString(), nodetask.TaskModel.CategoryId.ToString());  // 停止触发器
                    _ische.UnscheduleJob(nodetask.TaskModel.Id.ToString(), nodetask.TaskModel.CategoryId.ToString()); // 移除触发器
                    _ische.DeleteJob(nodetask.TaskModel.Id.ToString(), nodetask.TaskModel.CategoryId.ToString());     // 删除任务

                    TaskRuntimePool.Remove(taskid);
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
        }
Ejemplo n.º 5
0
        /// <summary>
        /// 任务开启
        /// </summary>
        /// <param name="taskid"></param>
        /// <returns></returns>
        public bool Start(long taskid)
        {
            LogHelper.WriteInfo("启动" + taskid + "任务");
            try
            {
                NodeTaskRuntimeInfo nodetask = TaskPool.Instance().Get(taskid.ToString());
                if (nodetask != null)
                {
                    LogHelper.WriteInfo("" + taskid + "任务已经开启");
                    return false;
                }
                TaskDal taskdal = new TaskDal();
                nodetask = new NodeTaskRuntimeInfo();
                nodetask.Tasklock = new TaskLock();
                nodetask.TaskModel = taskdal.GetById(GlobalConfig.TaskDataBaseConnectString, taskid.ToString());
                string filepath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, GlobalConfig.TaskDLL, nodetask.TaskModel.Id.ToString());  //任务dll在节点service存放地址
                string srcpath = Path.Combine(nodetask.TaskModel.TaskClassPath, nodetask.TaskModel.TaskFileName);
                DeCompressionHelper.UnCompress(srcpath, filepath);

                AppDomainSetup setup = new AppDomainSetup();
                setup.ShadowCopyFiles = "true";
                setup.ApplicationBase = System.IO.Path.GetDirectoryName(filepath);

                var appdomain = AppDomain.CreateDomain(Path.Combine(filepath, nodetask.TaskModel.TaskClassNamespace), null, setup);
                BaseTaskDLL taskdll = (BaseTaskDLL)appdomain.CreateInstanceFromAndUnwrap(Path.Combine(filepath, nodetask.TaskModel.TaskFileName), nodetask.TaskModel.TaskClassNamespace);
                
                nodetask.TaskDLL = taskdll;

                TaskPool.Instance().Add(taskid.ToString(), nodetask);

                LogHelper.WriteInfo("节点开启成功");
                return true;
            }
            catch (Exception ex)
            {
                LogHelper.WriteError(ex);
                return false;
            }
        }
Ejemplo n.º 6
0
        /// <summary>
        /// 任务开启
        /// </summary>
        /// <param name="taskid"></param>
        /// <returns></returns>
        public bool Start(long taskid)
        {
            LogHelper.WriteInfo("启动" + taskid + "任务");
            try
            {
                NodeTaskRuntimeInfo nodetask = TaskPool.Instance().Get(taskid.ToString());
                if (nodetask != null)
                {
                    LogHelper.WriteInfo("" + taskid + "任务已经开启");
                    return(false);
                }
                TaskDal taskdal = new TaskDal();
                nodetask           = new NodeTaskRuntimeInfo();
                nodetask.Tasklock  = new TaskLock();
                nodetask.TaskModel = taskdal.GetById(GlobalConfig.TaskDataBaseConnectString, taskid.ToString());
                string filepath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, GlobalConfig.TaskDLL, nodetask.TaskModel.Id.ToString());  //任务dll在节点service存放地址
                string srcpath  = Path.Combine(nodetask.TaskModel.TaskClassPath, nodetask.TaskModel.TaskFileName);
                DeCompressionHelper.UnCompress(srcpath, filepath);

                AppDomainSetup setup = new AppDomainSetup();
                setup.ShadowCopyFiles = "true";
                setup.ApplicationBase = System.IO.Path.GetDirectoryName(filepath);

                var         appdomain = AppDomain.CreateDomain(Path.Combine(filepath, nodetask.TaskModel.TaskClassNamespace), null, setup);
                BaseTaskDLL taskdll   = (BaseTaskDLL)appdomain.CreateInstanceFromAndUnwrap(Path.Combine(filepath, nodetask.TaskModel.TaskFileName), nodetask.TaskModel.TaskClassNamespace);

                nodetask.TaskDLL = taskdll;

                TaskPool.Instance().Add(taskid.ToString(), nodetask);

                LogHelper.WriteInfo("节点开启成功");
                return(true);
            }
            catch (Exception ex)
            {
                LogHelper.WriteError(ex);
                return(false);
            }
        }
Ejemplo n.º 7
0
        public void Execute(JobExecutionContext context)
        {
            string taskid = context.JobDetail.Name;
            NodeTaskRuntimeInfo nodetask = TaskPool.Instance().Get(taskid);

            LogHelper.WriteInfo("TaskJob运行Execute;context.JobDetail.Name" + context.JobDetail.Name + "nodetask" + nodetask);
            nodetask.Tasklock.Invoke(() =>
            {
                try
                {
                    nodetask.TaskDLL.StartRun();
                }
                catch (Exception exp)
                {
                    LogHelper.WriteError("任务" + taskid + "TaskJob回调时执行失败");
                }
            });
            //lock (lock_node)
            //{
            //    LogHelper.WriteDebug("准备运行一次:" + nodetask.TaskDLL.GetType().ToString());
            //    //nodetask.TaskDLL.StartRun();
            //}
        }
Ejemplo n.º 8
0
        public bool Add(string taskid, NodeTaskRuntimeInfo nodetask)
        {
            lock (lock_task)
            {
                if (!TaskRuntimePool.ContainsKey(taskid))
                {
                    LogHelper.WriteInfo("加载taskJob");
                    JobDetail job1 = new JobDetail(taskid, nodetask.TaskModel.CategoryId.ToString(), typeof(TaskJob));

                    CronTrigger triger = new CronTrigger(nodetask.TaskModel.Id.ToString(), nodetask.TaskModel.CategoryId.ToString());
                    //triger.CronExpressionString = "0/10 * * * * ?";
                    triger.CronExpressionString = nodetask.TaskModel.TaskCron;
                    //Trigger triger1 = TriggerFactory.Create(nodetask);
                    LogHelper.WriteInfo("TaskCron:" + nodetask.TaskModel.TaskCron);
                    _ische.ScheduleJob(job1, triger);
                    TaskRuntimePool.Add(taskid, nodetask);
                    return true;
                }
                else
                {
                    return false;
                }
            }
        }
Ejemplo n.º 9
0
        public bool Add(string taskid, NodeTaskRuntimeInfo nodetask)
        {
            lock (lock_task)
            {
                if (!TaskRuntimePool.ContainsKey(taskid))
                {
                    LogHelper.WriteInfo("加载taskJob");
                    JobDetail job1 = new JobDetail(taskid, nodetask.TaskModel.CategoryId.ToString(), typeof(TaskJob));

                    CronTrigger triger = new CronTrigger(nodetask.TaskModel.Id.ToString(), nodetask.TaskModel.CategoryId.ToString());
                    //triger.CronExpressionString = "0/10 * * * * ?";
                    triger.CronExpressionString = nodetask.TaskModel.TaskCron;
                    //Trigger triger1 = TriggerFactory.Create(nodetask);
                    LogHelper.WriteInfo("TaskCron:" + nodetask.TaskModel.TaskCron);
                    _ische.ScheduleJob(job1, triger);
                    TaskRuntimePool.Add(taskid, nodetask);
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
        }
Ejemplo n.º 10
0
 public bool Dispose(long taskid, NodeTaskRuntimeInfo nodetask)
 {
     if (nodetask != null && nodetask.Domain != null)
     {
         try
         {
             TaskPool.Instance().Remove(taskid.ToString());
             AppDomain.Unload(nodetask.Domain);
             return true;
         }
         catch (Exception ex)
         {
             LogHelper.WriteError(ex);
             return false;
         }
     }
     return false;
 }
Ejemplo n.º 11
0
 public static Trigger Create(NodeTaskRuntimeInfo nodetask)
 {
     CronTrigger triger = new CronTrigger(nodetask.TaskModel.Id.ToString(), nodetask.TaskModel.CategoryId.ToString());
     triger.CronExpressionString = nodetask.TaskModel.TaskCron;
     return triger;
 }