コード例 #1
0
        public void Execute(IJobExecutionContext context)
        {
            foreach (var qh in _queueHandlers)
            {
                var blockedJobs = qh.GetBlockedJobs();
                Logger.DebugFormat("Queue {0} has {1} blocked jobs!", qh.Name, blockedJobs.Count);
                //if we have blocked jobs, probably the worker is blocked.
                var allBlockedHandles = blockedJobs
                                        .Select(j => j.ExecutingHandle)
                                        .Distinct();
                foreach (var blockedHandle in allBlockedHandles)
                {
                    Logger.WarnFormat("Unblock jobs for queue {0} and handle {1}", qh.Name, blockedHandle);
                    _pollerJobManager.RestartWorker(blockedHandle, true);
                }
                foreach (var job in blockedJobs)
                {
                    Logger.WarnFormat("Unblock job {0}", job.Id);

                    qh.SetJobExecuted(job.Id, "Timeout, unblocked by QueuedJobQuartzMonitor", null);
                }
            }
        }