public void Init() { if (workers == null) { var workerBuilder = new List <MessageHandlerWorker>(); foreach (var entry in handlerMap) { var msgType = entry.Key; var handlerFactory = entry.Value; var queueNames = new QueueNames(msgType); var noOfThreads = handlerThreadCountMap[msgType]; if (PriortyQueuesWhitelist == null || PriortyQueuesWhitelist.Any(x => x == msgType.Name)) { noOfThreads.Times(i => workerBuilder.Add(new MessageHandlerWorker( clientsManager, handlerFactory.CreateMessageHandler(), queueNames.Priority, WorkerErrorHandler))); } noOfThreads.Times(i => workerBuilder.Add(new MessageHandlerWorker( clientsManager, handlerFactory.CreateMessageHandler(), queueNames.In, WorkerErrorHandler))); } workers = workerBuilder.ToArray(); queueWorkerIndexMap = new Dictionary <string, int[]>(); for (var i = 0; i < workers.Length; i++) { var worker = workers[i]; int[] workerIds; if (!queueWorkerIndexMap.TryGetValue(worker.QueueName, out workerIds)) { queueWorkerIndexMap[worker.QueueName] = new[] { i }; } else { workerIds = new List <int>(workerIds) { i }.ToArray(); queueWorkerIndexMap[worker.QueueName] = workerIds; } } } }
public virtual void Init() { if (workers != null) { return; } var workerBuilder = new List <RabbitMqWorker>(); using (var channel = Connection.OpenChannel()) { foreach (var entry in handlerMap) { var msgType = entry.Key; var handlerFactory = entry.Value; var queueNames = new QueueNames(msgType); var noOfThreads = handlerThreadCountMap[msgType]; if (PriortyQueuesWhitelist == null || PriortyQueuesWhitelist.Any(x => x == msgType.Name)) { noOfThreads.Times(i => workerBuilder.Add(new RabbitMqWorker( messageFactory, handlerFactory.CreateMessageHandler(), queueNames.Priority, WorkerErrorHandler, AutoReconnect))); } noOfThreads.Times(i => workerBuilder.Add(new RabbitMqWorker( messageFactory, handlerFactory.CreateMessageHandler(), queueNames.In, WorkerErrorHandler, AutoReconnect))); channel.RegisterQueues(queueNames); } workers = workerBuilder.ToArray(); queueWorkerIndexMap = new Dictionary <string, int[]>(); for (var i = 0; i < workers.Length; i++) { var worker = workers[i]; int[] workerIds; if (!queueWorkerIndexMap.TryGetValue(worker.QueueName, out workerIds)) { queueWorkerIndexMap[worker.QueueName] = new[] { i }; } else { workerIds = new List <int>(workerIds) { i }.ToArray(); queueWorkerIndexMap[worker.QueueName] = workerIds; } } } }