void AddWorkerToStorageQueue(Worker worker, int capacity = 1) { using (var returnAddress = new MessageQueue(MsmqUtilities.GetFullPath(worker.Address), false, true, QueueAccessMode.Send)) { var message = new Message { Label = worker.SessionId, ResponseQueue = returnAddress }; for (var i = 0; i < capacity; i++) { if (UnitOfWork.HasActiveTransaction()) { storageQueue.Send(message, UnitOfWork.Transaction); } else { storageQueue.Send(message, MessageQueueTransactionType.Automatic); } } } }
public void RegisterNewWorker(Worker worker, int capacity) { // Need to handle backwards compatibility if (worker.SessionId == String.Empty) { ClearAvailabilityForWorker(worker.Address); } AddWorkerToStorageQueue(worker, capacity); registeredWorkerAddresses[worker.Address] = worker.SessionId; Logger.InfoFormat("Worker '{0}' has been registered with {1} capacity.", worker.Address, capacity); }
public void WorkerAvailable(Worker worker) { string sessionId; if (!registeredWorkerAddresses.TryGetValue(worker.Address, out sessionId)) { // Drop ready message as this worker has been disconnected // or the worker send us a message before the "WorkerStarting" message Logger.InfoFormat("Dropping ready message from worker '{0}', because this worker has been disconnected.", worker.Address); return; } if (sessionId != worker.SessionId) { // Drop ready message as this message is an extra message that could have been sent because of // https://github.com/Particular/NServiceBus/issues/978 Logger.InfoFormat("Dropping ready message from worker {0}, because this ready message is from an old worker sessionid.", worker.Address); return; } Logger.InfoFormat("Worker '{0}' is available to take on more work.", worker.Address); AddWorkerToStorageQueue(worker); }
public void WorkerAvailable(Worker worker) { string sessionId; if (!registeredWorkerAddresses.TryGetValue(worker.Address, out sessionId)) { // The worker send us a message before the "WorkerStarting" message Logger.InfoFormat("Dropping ready message from Worker at '{0}', because this worker worker sent us a message before the 'WorkerStarting' message.", worker.Address); return; } if (sessionId.Equals("disconnected")) { // Drop ready message as this worker has been disconnected Logger.InfoFormat("Dropping ready message from Worker at '{0}', because this worker has been disconnected.", worker.Address); return; } Logger.InfoFormat("Worker at '{0}' is available to take on more work.", worker.Address); AddWorkerToStorageQueue(worker); }