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