コード例 #1
0
 private void _dispatchJobExec(ServiceDomainItem servicedomain, Core.DispatchArg arg)
 {
     try
     {
         int startStatus = servicedomain.StartDispatch(arg, () =>
         {
             var result = Core.ApiSdk.SystemApi.BeginDispatchExecute(arg.DispatchId);
             if (result.code <= 0)
             {
                 RLib.WatchLog.Loger.Error("开始调度执行失败", arg.DispatchId + "\r\n" + result.msg);
                 return(false);
             }
             //需要检查是否在运行
             if (result.data > 0 && !string.IsNullOrEmpty(arg.RunKey))
             {
                 int[] currDispathIds = null;
                 var isrunning        = servicedomain.IsRuningKey(arg.RunKey, out currDispathIds);
                 if (!isrunning)
                 {
                     isrunning = _AskDispathIsRun(arg.TaskId, arg.RunKey, servicedomain.TaskDetail.NodeCount);
                 }
                 if (isrunning)
                 {
                     Core.ApiSdk.SystemApi.SkipDispatchExecute(arg.DispatchId);
                     DoGetDispatchSign();
                     return(false);
                 }
                 else
                 {
                     //自动结束
                     Core.ApiSdk.SystemApi.AutoEndDispatchExecute(result.data);
                 }
             }
             return(true);
         });
         if (startStatus == -1)
         {
             RLib.WatchLog.Loger.Error("分配任务失败 没有取得空闲实例", "DispatchId=" + arg.DispatchId + " ;RunArgs" + arg.RunArgs);
             return;
         }
         if (startStatus == 0)
         {
             RLib.WatchLog.Loger.Error("分配任务失败 有空闲实例,但分配不允许运行", "DispatchId=" + arg.DispatchId + " ;RunArgs" + arg.RunArgs);
             return;
         }
         Core.ApiSdk.SystemApi.EndDispatchExecute(arg.DispatchId, true, "");
     }
     catch (Exception ex)
     {
         RLib.WatchLog.Loger.Error("调度执行失败", ex);
         Core.ApiSdk.SystemApi.EndDispatchExecute(arg.DispatchId, false, ex.Message);
     }
 }
コード例 #2
0
        private string _OnTalk(string msg)
        {
            if (msg.StartsWith(Ruanal.Core.ConfigConst.TalkAskDispatchRunning))
            {
                string[] info = msg.Substring(Ruanal.Core.ConfigConst.TalkAskDispatchRunning.Length).Split(new char[] { '#' }, 2);
                if (info.Length != 2)
                {
                    return(null);
                }
                int               taskId   = RLib.Utils.Converter.StrToInt(info[0]);
                string            runkey   = info[1];
                ServiceDomainItem taskitem = null;
                lock (servicelocker)
                {
                    taskitem = serviceItems.FirstOrDefault(x => x.TaskId == taskId);
                }
                if (taskitem != null)
                {
                    int[] dispathIds = null;
                    if (taskitem.IsRuningKey(runkey, out dispathIds))
                    {
                        return(dispathIds.Length + ":" + string.Join("_", dispathIds));
                    }
                    return("0");
                }
            }
            if (msg.StartsWith(Ruanal.Core.ConfigConst.TalkTaskInstanceStatus))
            {
                string[] info = msg.Substring(Ruanal.Core.ConfigConst.TalkTaskInstanceStatus.Length).Split(new char[] { '#' }, 1);
                if (info.Length != 1)
                {
                    return(null);
                }
                int taskId = RLib.Utils.Converter.StrToInt(info[0]);
                ServiceDomainItem taskitem = null;
                lock (servicelocker)
                {
                    taskitem = serviceItems.FirstOrDefault(x => x.TaskId == taskId);
                }
                if (taskitem != null)
                {
                    string ss = string.Format("【{0}】#{1}", Ruanal.Core.Config.ClientID,
                                              string.Join("#", taskitem.InstanceSummary()));
                    return(ss);
                }
            }

            if (msg.StartsWith(Ruanal.Core.ConfigConst.TalkNodeTaskStatus))
            {
                string[] info = msg.Substring(Ruanal.Core.ConfigConst.TalkNodeTaskStatus.Length).Split(new char[] { '#' }, 1);
                if (info.Length != 1)
                {
                    return(null);
                }
                if (info[0] != Ruanal.Core.Config.ClientID)
                {
                    return(null);
                }
                StringBuilder sb = new StringBuilder();
                foreach (var a in serviceItems.ToList())
                {
                    sb.AppendFormat("【{0}】[P:{1}] [M:{2}] [T:{3}]#", a.TaskId, a.innerServices.Count(), a.GetMemoryMB(), a.TaskDetail.Title);
                }
                return(sb.ToString());
            }
            return(null);
        }