예제 #1
0
        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;
                    }
                }
            }
        }
예제 #2
0
        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;
                    }
                }
            }
        }