protected internal void StartQueues(Dictionary <Type, IMessageHandlerFactory> handlerMap)
        {
            // Create queues for each registered type
            this.handlerMap = handlerMap;

            queueMap = new Dictionary <string, Type>();

            var mqSuffixes = new [] { ".inq", ".outq", ".priorityq", ".dlq" };

            foreach (var type in this.handlerMap.Keys)
            {
                foreach (var mqSuffix in mqSuffixes)
                {
                    var queueName = QueueNames.ResolveQueueNameFn(type.Name, mqSuffix);

                    if (!queueMap.ContainsKey(queueName))
                    {
                        queueMap.Add(queueName, type);
                    }
#if !NETSTANDARD2_0
                    var mqDesc = new QueueDescription(queueName);
                    if (!namespaceManager.QueueExists(queueName))
                    {
                        namespaceManager.CreateQueue(mqDesc);
                    }
#endif
                }

                var mqNames = new QueueNames(type);
                AddQueueHandler(mqNames.In);
                AddQueueHandler(mqNames.Priority);
            }
        }
Ejemplo n.º 2
0
        protected internal void StartQueues(Dictionary <Type, IMessageHandlerFactory> handlerMap, Dictionary <Type, int> handlerThreadCountMap)
        {
            // Create queues for each registered type
            this.handlerMap = handlerMap;

            queueMap = new Dictionary <string, Type>();

            var mqSuffixes = new[] { ".inq", ".outq", ".priorityq", ".dlq" };

            foreach (var type in this.handlerMap.Keys)
            {
                foreach (var mqSuffix in mqSuffixes)
                {
                    var queueName = QueueNames.ResolveQueueNameFn(type.Name, mqSuffix);
                    queueName = queueName.SafeQueueName();

                    if (!queueMap.ContainsKey(queueName))
                    {
                        queueMap.Add(queueName, type);
                    }

                    var mqDesc = new QueueDescription(queueName);
#if !NETSTANDARD2_0
                    if (!namespaceManager.QueueExists(queueName))
                    {
                        namespaceManager.CreateQueue(mqDesc);
                    }
#else
                    // Prefer GetAwaiter().GetResult() so that the StackTrace
                    // is easier to use, see:
                    // https://stackoverflow.com/a/36427080
                    if (!managementClient.QueueExistsAsync(mqDesc.Path).GetAwaiter().GetResult())
                    {
                        managementClient.CreateQueueAsync(mqDesc).GetAwaiter().GetResult();
                    }
#endif
                }

                var mqNames = new QueueNames(type);
                AddQueueHandler(mqNames.In, handlerThreadCountMap[type]);
                AddQueueHandler(mqNames.Priority, handlerThreadCountMap[type]);
            }
        }