예제 #1
0
        public override int ProcessItems()
        {
            if (_paused)
            {
                return(0);
            }

            _jobsMutex = Catalog.Preconfigure()
                         .Add(DistributedMutexLocalConfig.Name, ScheduledItem.MutexName)
                         .ConfiguredResolve <IDistributedMutex>();

            try
            {
                if (_jobsMutex.Wait(TimeSpan.FromMinutes(4)))
                {
                    var dueCount = 0;

                    using (_jobsMutex)
                    {
                        if (_jobsMutex.Open())
                        {
                            _dblog.InfoFormat("Worker {0} processing scheduled jobs",
                                              _hostEnv.GetCurrentHostIdentifier(
                                                  HostEnvironmentConstants.DefaultHostScope));


                            var due = _jobScheduler.GetDue();
                            dueCount = due.Count();

                            _log.InfoFormat("Processing {0} due jobs", due.Count());

                            foreach (var item in due)
                            {
                                _token.ThrowIfCancellationRequested();

                                _dblog.InfoFormat("Job due, starting {1} {2} : {0}", item.Message, item.Type, item.Route);
                                _jobScheduler.Reschedule(item);

                                var message = JsonConvert.DeserializeObject(item.Message, item.Type);
                                _sender.Send(message, item.Route);
                            }
                        }
                    }

                    return(dueCount);
                }
            }
            catch (Exception ex)
            {
                _log.ErrorFormat(string.Format("An Exception was Caught in {0} ERROR: {1}", this.GetType().Name, ex.Message));
            }

            return(0);
        }