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); }
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); }
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); }
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)); } }