Exemple #1
0
        public TaskBaseResponse TestMqMessage3(Test3 message)
        {
            TaskBaseResponse task = new TaskBaseResponse()
            {
                Status       = DateTime.Now.Ticks % 7 != 0 ? HttpStatusCode.OK : HttpStatusCode.BadGateway,
                ErrorMessage = message.Content3
            };

            return(task);
        }
Exemple #2
0
        public TaskBaseResponse TestMqMessage2([FromBody] Test2 message)
        {
            TaskBaseResponse task = new TaskBaseResponse()
            {
                Status       = DateTime.Now.Ticks % 5 != 0 ? HttpStatusCode.OK : HttpStatusCode.BadGateway,
                ErrorMessage = message.Content2
            };

            return(task);
        }
Exemple #3
0
        public TaskBaseResponse TestMqMessage1([FromBody] Test1 message)
        {
            var statusCode = HttpStatusCode.OK;

            if (message.ToJsonString().GetHashCode() % 3 != 0)
            {
                statusCode = HttpStatusCode.BadGateway;
            }
            TaskBaseResponse task = new TaskBaseResponse()
            {
                Status       = statusCode,
                ErrorMessage = message.Content1
            };

            return(task);
        }
Exemple #4
0
        internal void Handler(FailMqMessageModel model)
        {
            int count = 1;
            var flag  = false;

            do
            {
                int defaultInterval     = 1000;
                TaskBaseResponse result = null;
                try
                {
                    result = HttpHelper.HttpPost <TaskBaseResponse>(model.ApiUrl, model.MessageContext);
                    LogHelper.LogInfo(logSource, string.Format("MqMessageExecute 调用业务API: {0};{1};{2}", model.ApiUrl, model.MessageContext, result.ToJsonString()));
                }
                catch (Exception ex)
                {
                    if (result.IsNull())
                    {
                        result = new TaskBaseResponse()
                        {
                            Status = System.Net.HttpStatusCode.InternalServerError
                        };
                    }
                    defaultInterval += 500;
                    LogHelper.LogError(logSource, string.Format("MqMessageExecute 调用业务异常API: {0};{1};{2}; ex:{3}", model.ApiUrl, model.MessageContext, result.ToJsonString(), ex.ToString()));
                }
                if (result.Status == System.Net.HttpStatusCode.OK)
                {
                    flag = UpdateStatus(model.Code, FailMqMessageStatus.Success);
                    break;
                }
                else
                {
                    count++;
                    Thread.CurrentThread.Join(defaultInterval * count);
                }
            } while (count <= 5);
            if (!flag)
            {
                UpdateStatus(model.Code, FailMqMessageStatus.HandlerFail, count);
            }
        }
Exemple #5
0
        /// <summary>
        /// 初始化执行任务线程
        /// </summary>
        /// <param name="task">执行任务接口</param>
        /// <param name="taskModel">任务配置</param>
        private void InitWorkerThread(ScheduleTaskConfigModel taskModel)
        {
            Thread th = new Thread(() =>
            {
                while (true)
                {
                    try
                    {   //更新数据状态
                        UpdateRunStatus(taskModel, TaskRunOptions.Runing);
                        var rm    = new TaskBaseResponse();
                        int count = 0;
                        do
                        {
                            int sleepSeconds = (count - 1) * 2000;
                            if (sleepSeconds > 0)
                            {
                                //休眠任务等待下次执行
                                Thread.Sleep(sleepSeconds);
                            }
                            //执行任务
                            try
                            {
                                rm = Execute(taskModel.ApiUrl, taskModel.Parameters, taskModel.Method);
                                if (rm.Status == System.Net.HttpStatusCode.OK)
                                {
                                    //更新数据状态
                                    UpdateRunStatus(taskModel, TaskRunOptions.Complete);
                                    break;
                                }
                                else
                                {
                                    LogHelper.LogError(logSource, string.Format("执行任务{0}异常,id:{1};任务即将结束;任务执行返回数据:{2}", taskModel.TaskName, taskModel.Id, JsonHelper.SerializeObject(rm)));
                                }
                            }
                            catch (Exception ex)
                            {
                                UpdateRunStatus(taskModel, TaskRunOptions.ExcetionEnd);

                                LogHelper.LogError(logSource, string.Format("执行任务{0}异常,id:{1};API:{2};ex:{3}", taskModel.TaskName, taskModel.Id,
                                                                            string.Format("{0},{1},{2}", taskModel.ApiUrl, taskModel.Parameters, taskModel.Method),
                                                                            ex.ToString()));
                                //休眠 N 秒后重试
                            }
                            count++;
                        } while (count <= taskModel.ExceptionNumber);
                        //休眠任务等待下次执行
                        Thread.Sleep(taskModel.DiffSeconds * 1000);
                    }
                    catch (Exception ex)
                    {
                        UpdateRunStatus(taskModel, TaskRunOptions.ExcetionEnd);
                        LogHelper.LogError(logSource, string.Format("执行任务{0}异常,id:{1};ex:{2}", taskModel.TaskName, taskModel.Id, ex.ToString()));
                    }
                }
            });

            th.Name         = taskModel.TaskName;
            th.IsBackground = true;
            threadList.Add(new TaskThreadSettings()
            {
                RunTread   = th,
                TaskId     = taskModel.Id,
                ThreadId   = th.ManagedThreadId,
                ThreadName = th.Name,
                TaskModel  = taskModel
            });
        }