Exemple #1
0
        private ReturnT IdleBeat(int jobId)
        {
            JobThread jobThread = _jobThreadFactory.FindJobThread(jobId);

            if (jobThread != null && jobThread.IsRunningOrHasQueue())
            {
                return(ReturnT.CreateFailedResult("job thread is running or has trigger queue."));
            }
            return(ReturnT.SUCCESS);
        }
Exemple #2
0
        public ReturnT PushTriggerQueue(TriggerParam triggerParam)
        {
            // avoid repeat
            if (_triggerLogIdSet.ContainsKey(triggerParam.logId))
            {
                _logger.LogInformation("repeate trigger job, logId:{logId}", triggerParam.logId);
                return(ReturnT.CreateFailedResult("repeate trigger job, logId:" + triggerParam.logId));
            }

            _logger.LogInformation("repeate trigger job, logId:{logId}", triggerParam.logId);

            _triggerLogIdSet[triggerParam.jobId] = 0;
            _triggerQueue.Enqueue(triggerParam);
            _queueHasDataEvent.Set();
            return(ReturnT.SUCCESS);
        }
Exemple #3
0
        private ReturnT Run(TriggerParam triggerParam)
        {
            if (Constants.GlueType.BEAN != triggerParam.glueType)
            {
                return(ReturnT.CreateFailedResult("glueType[" + triggerParam.glueType + "] is not valid."));
            }

            JobThread jobThread;
            var       isNewThread = _jobThreadFactory.GetJobThread(triggerParam, out jobThread);

            if (!isNewThread && Constants.ExecutorBlockStrategy.DISCARD_LATER == triggerParam.executorBlockStrategy && jobThread.IsRunningOrHasQueue())
            {
                return(ReturnT.CreateFailedResult("block strategy effect:" + triggerParam.executorBlockStrategy));
            }

            var result = jobThread.PushTriggerQueue(triggerParam);

            if (isNewThread)
            {
                jobThread.Start();
            }
            return(result);
        }
Exemple #4
0
        private void Run()
        {
            TriggerParam triggerParam = null;

            while (!_toStop)
            {
                _running     = false;
                triggerParam = null;
                ReturnT executeResult = null;
                try
                {
                    if (_triggerQueue.TryDequeue(out triggerParam))
                    {
                        _running = true;
                        byte temp;
                        _triggerLogIdSet.TryRemove(triggerParam.logId, out temp);
                        JobLogger.SetLogFileName(triggerParam.logDateTim, triggerParam.logId);
                        var executionContext = new JobExecutionContext()
                        {
                            BroadcastIndex = triggerParam.broadcastIndex,
                            BroadcastTotal = triggerParam.broadcastTotal,
                            ExecutorParams = triggerParam.executorParams
                        };
                        // execute
                        JobLogger.Log("<br>----------- xxl-job job execute start -----------<br>----------- Param:" + triggerParam.executorParams);

                        var handler = _jobHandlerFactory.GetJobHandler(triggerParam.executorHandler);
                        executeResult = handler.Execute(executionContext);
                        JobLogger.Log("<br>----------- xxl-job job execute end(finish) -----------<br>----------- ReturnT:" + executeResult);
                    }
                    else
                    {
                        if (!_queueHasDataEvent.WaitOne(Constants.JobThreadWaitTime))
                        {
                            ToStop("excutor idel times over limit.");
                        }
                    }
                }
                catch (Exception ex)
                {
                    if (triggerParam != null)
                    {
                        if (_toStop)
                        {
                            JobLogger.Log("<br>----------- JobThread toStop, stopReason:" + _stopReason);
                        }
                        var errorMsg = ex.ToString();
                        executeResult = ReturnT.CreateFailedResult(errorMsg);
                        JobLogger.Log("<br>----------- JobThread Exception:" + errorMsg + "<br>----------- xxl-job job execute end(error) -----------");
                    }
                    else
                    {
                        _logger.LogError(ex, "JobThread exception.");
                    }
                }
                finally
                {
                    if (triggerParam != null)
                    {
                        OnCallback?.Invoke(this, new HandleCallbackParam(triggerParam.logId, triggerParam.logDateTim, executeResult ?? ReturnT.FAIL));
                    }
                }
            }

            // callback trigger request in queue
            while (_triggerQueue.TryDequeue(out triggerParam))
            {
                var stopResult = ReturnT.CreateFailedResult(_stopReason + " [job not executed, in the job queue, killed.]");
                OnCallback?.Invoke(this, new HandleCallbackParam(triggerParam.logId, triggerParam.logDateTim, stopResult));
            }
        }