Пример #1
0
        private void OnWorkerAdded(WorkerDescriptor worker)
        {
            if (_workQueues.TryGetValue(worker.CommandType, out var workQueue))
            {
                if (workQueue.TryDequeue(out TransportMessage work, TimeSpan.Zero))
                {
                    if (work.CheckTtl(_configuration.WorkTtl))
                    {
                        work.WorkerId = worker.WorkerId;

                        _backend.SendMoreFrame(worker.WorkerId.ToByteArray())
                        .SendMoreFrameEmpty()
                        .SendFrame(work.Serialize());

                        return;
                    }
                }
            }

            var queue = _workerQueues.GetOrAdd(worker.CommandType, (type) =>
            {
                return(new NetMQQueue <WorkerDescriptor>());
            });

            queue.Enqueue(worker);
        }
Пример #2
0
        private bool TryGetWorker(TransportMessage work, out WorkerDescriptor worker)
        {
            worker = null;

            if (_workerQueues.TryGetValue(work.CommandType, out var workerQueue))
            {
                while (workerQueue.TryDequeue(out WorkerDescriptor workerInternal, TimeSpan.Zero))
                {
                    if (workerInternal.IsAlive(_configuration.WorkerTtl))
                    {
                        worker = workerInternal;
                        return(true);
                    }
                }
            }

            return(false);
        }