コード例 #1
0
        /// <summary>
        /// 创建一个延时任务
        /// </summary>
        /// <param name="entity"></param>
        /// <param name="executors"></param>
        /// <returns></returns>
        public ServiceResponseMessage Add(ScheduleDelayedEntity entity, List <string> executors)
        {
            if (executors == null || !executors.Any())
            {
                //没有指定worker就根据权重选择2个
                executors = _nodeService.GetAvaliableWorkerByPriority(null, 2).Select(x => x.NodeName).ToList();
            }
            if (!executors.Any())
            {
                return(ServiceResult(ResultStatus.Failed, "没有可用节点!"));
            }
            entity.CreateTime = DateTime.Now;

            //保存主信息
            _repositoryFactory.ScheduleDelayeds.Add(entity);
            //创建并保存任务锁
            _repositoryFactory.ScheduleLocks.Add(new ScheduleLockEntity {
                ScheduleId = entity.Id, Status = 0
            });

            //保存执行节点
            _repositoryFactory.ScheduleExecutors.AddRange(executors.Select(x => new ScheduleExecutorEntity
            {
                ScheduleId = entity.Id,
                WorkerName = x
            }));

            //事务提交
            if (_unitOfWork.Commit() > 0)
            {
                //任务持久化成功后分发给worker,进入就绪状态
                return(Start(entity.Id));
            }
            return(ServiceResult(ResultStatus.Failed, "数据保存失败!"));
        }
コード例 #2
0
        public ServiceResponseMessage Create([FromForm] ScheduleDelayedInfo task)
        {
            if (!ModelState.IsValid)
            {
                return(ApiResponse(ResultStatus.ParamError, "非法提交参数"));
            }
            ScheduleDelayedEntity entity = ObjectMapper <ScheduleDelayedInfo, ScheduleDelayedEntity> .Convert(task);

            entity.Status         = (int)ScheduleDelayStatus.Created;
            entity.CreateUserName = CurrentUserName;
            var result = _taskService.Add(entity, task.Executors);

            return(result);
        }
コード例 #3
0
        public ActionResult Create(ScheduleDelayedInfo task)
        {
            if (!ModelState.IsValid)
            {
                return(this.JsonNet(false, "数据验证失败!"));
            }
            ScheduleDelayedEntity entity = ObjectMapper <ScheduleDelayedInfo, ScheduleDelayedEntity> .Convert(task);

            entity.Status         = (int)ScheduleDelayStatus.Created;
            entity.CreateUserName = CurrentAdmin.UserName;
            var result = _taskService.Add(entity, task.Executors);

            if (result.Status == ResultStatus.Success)
            {
                return(this.JsonNet(true, "任务创建成功!", Url.Action("Index")));
            }
            return(this.JsonNet(false, "任务创建失败!"));
        }
コード例 #4
0
        /// <summary>
        /// 根据任务实体插入
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        private static bool InsertByEntity(ScheduleDelayedEntity entity)
        {
            bool       success = false;
            NotifyPlan plan    = new NotifyPlan()
            {
                Key            = entity.Id.ToString(),
                NotifyUrl      = entity.NotifyUrl,
                NotifyDataType = entity.NotifyDataType,
                NotifyBody     = entity.NotifyBody,
                Callback       = NotifyExecutedEvent
            };
            string pattern = ConfigurationCache.GetField <string>("DelayTask_DelayPattern");

            if (pattern.ToLower() == "absolute")
            {
                success = Insert(plan, entity.DelayAbsoluteTime);
            }
            else
            {
                success = Insert(plan, entity.DelayTimeSpan);
            }
            return(success);
        }