예제 #1
0
        /// <summary>
        /// 服務清單結束後
        /// </summary>
        /// <param name="schedule"></param>
        /// <param name="id"></param>
        /// <param name="success"></param>
        /// <param name="message"></param>
        /// <param name="workSeconds"></param>
        protected void ScheduleFinish(ScheduleBase schedule, int id, bool success, string message, double workSeconds)
        {
            try
            {
                lock (_Lock)
                {
                    ThreadCounter--;
                    _Schedules.Remove(schedule);
                    MaxThreadAutoReset.Set();
                }

                if (success)
                {
                    //回壓狀態,之後寫入至ELK
                    ScheduleTaskModule.Complete(id, string.Format("{0} Completed,Use Time(sec):{1}, Run Server:{2}", schedule.Task.ScheduleType.ToString(), workSeconds, _ScheduleServer));
                }
                else
                {
                    //回壓狀態,之後寫入至ELK
                    ScheduleTaskModule.Fail(id, string.Format("{0} Fail,Error Message:{1}, Run Server:{2}", schedule.Task.ScheduleType.ToString(), message, _ScheduleServer));
                }
            }
            catch (Exception ex)
            {
                ScheduleTaskModule.Exception(id, $"{schedule.Task.ScheduleType.ToString()} Exception,Error Message:{message}, Run Server:{_ScheduleServer}, ExceptionMsg:{ex.Message}, ExceptionStackTrace:{ex.StackTrace}");
            }
        }
예제 #2
0
        /// <summary>
        /// 執行清單
        /// </summary>
        private void CallScheduelBaseII()
        {
            ScheduleBase schedule = GetNextJob();//去RabbitMQ 取下一個Message

            if (schedule != null)
            {
                //紀錄開始動作
                ScheduleTaskModule.Start(schedule.Task.ID, string.Format("{0} Start, Run Server:{1}", schedule.Task.ScheduleType.ToString(), _ScheduleServer));
                lock (_Lock)
                {
                    _Schedules.Add(schedule);
                    schedule._OnFinished += new ScheduleBase.FinishedHandler(ScheduleFinish);//實作Schedule  Finish


                    ThreadCounter++;
                    if (Debugger.IsAttached)
                    {
                        schedule.GO();//測試用
                    }
                    else
                    {
                        Thread thread = new Thread(schedule.GO);
                        thread.Start();
                    }
                }
            }
            else
            {
                //有可能無訊息了,也有可能訊息本身有錯誤格式
                ScheduleTaskModule.NoMessage(_IntervalSec);
                System.Threading.Thread.Sleep(_IntervalSec * 1000);
            }
        }
예제 #3
0
        /// <summary>
        /// 實作取得下一個推波訊息
        /// </summary>
        /// <returns></returns>
        protected override ScheduleBase GetNextJob()
        {
            if (!enabled)
            {
                return(null);
            }

            PushMessageSchedule schedule = null;

            ScheduleTask scheduleTask = ScheduleTaskModule.GetNextScheduleTask(ScheduleType.PushMessage);


            if (scheduleTask != null)
            {
                schedule      = new PushMessageSchedule(scheduleTask.ID);
                schedule.Task = scheduleTask;
            }

            return(schedule);
        }