Exemple #1
0
        void Consume(WorkerAvailable <TMessage> message)
        {
            WorkerDetails worker;

            lock (_workers)
            {
                worker = _workers.Retrieve(message.ControlUri, () =>
                {
                    return(new WorkerDetails
                    {
                        ControlUri = message.ControlUri,
                        DataUri = message.DataUri,
                        InProgress = message.InProgress,
                        InProgressLimit = message.InProgressLimit,
                        Pending = message.Pending,
                        PendingLimit = message.PendingLimit,
                        LastUpdate = message.Updated,
                    });
                });
            }

            worker.UpdateInProgress(message.InProgress, message.InProgressLimit, message.Pending, message.PendingLimit,
                                    message.Updated);

            if (_log.IsDebugEnabled)
            {
                _log.DebugFormat("Worker {0}: {1} in progress, {2} pending", message.DataUri, message.InProgress, message.Pending);
            }
        }
        private void MakeWorkerAvailable(WorkerAvailable message)
        {
            var nextmessage = GetNextCharacter();

            if (nextmessage != null)
            {
                Sender.Tell(nextmessage);
            }
            else
            {
                _availableWorkers.Enqueue(Sender);
            }
        }
Exemple #3
0
        void PublishWorkerAvailability()
        {
            try
            {
                var message = new WorkerAvailable <TMessage>(_controlUri, _dataUri, _inProgress, _inProgressLimit,
                                                             _pendingMessages.PendingMessageCount(), _pendingLimit);
                _updatePending = false;

                _bus.Publish(message);
            }
            catch
            {
            }
        }
Exemple #4
0
        public void Consume(WorkerAvailable <T> message)
        {
            WorkerDetails worker = _workers.Retrieve(message.ControlUri, () =>
            {
                return(new WorkerDetails
                {
                    ControlUri = message.ControlUri,
                    DataUri = message.DataUri,
                    InProgress = message.InProgress,
                    InProgressLimit = message.InProgressLimit,
                    Pending = message.Pending,
                    PendingLimit = message.PendingLimit,
                    LastUpdate = message.Updated,
                });
            });

            worker.UpdateInProgress(message.InProgress, message.InProgressLimit, message.Pending, message.PendingLimit, message.Updated);
        }
Exemple #5
0
        public void Consume(IConsumeContext <PingWorker> context)
        {
            try
            {
                var message = new WorkerAvailable <TMessage>(_worker.ControlUri, _worker.DataUri,
                                                             _inProgress, _inProgressLimit, _pending.PendingMessageCount(), _pendingLimit);

                context.Respond(message);

                if (_log.IsDebugEnabled)
                {
                    _log.DebugFormat("Worker {0}: {1} in progress, {2} pending", _worker.DataUri,
                                     _inProgress, _pending);
                }
            }
            catch
            {
            }
        }
Exemple #6
0
        public void PublishWorkerAvailability(TimeSpan timeToLive)
        {
            try
            {
                var message = new WorkerAvailable <TMessage>(_worker.ControlUri, _worker.DataUri,
                                                             _inProgress, _inProgressLimit, _pending.PendingMessageCount(), _pendingLimit);

                _updatePending = false;

                _worker.Bus.ControlBus.Publish(message, x => x.ExpiresAt(DateTime.UtcNow + timeToLive));

                if (_log.IsDebugEnabled)
                {
                    _log.DebugFormat("Worker {0}: {1} in progress, {2} pending", _worker.DataUri,
                                     _inProgress, _pending);
                }
            }
            catch
            {
            }
        }