Exemplo n.º 1
0
        /// <summary>
        /// 根据配置创建消费者
        /// </summary>
        /// <param name="itemKey"></param>
        private void RunFactory(MqConsumerItemKey itemKey)
        {
            //pull 方式消费消息
            var configModel = TaskList.First(t => t.Exchange == itemKey.Exchange && t.RoutingKey == itemKey.RoutingKey && t.QueueName == itemKey.QueueName);

            if (configModel.MqMessageType == 0)
            {
                Thread th = new Thread(() => ParameterizedThreadStart(itemKey));
                th.Name         = string.Format("{0}-{1}-{2}", itemKey.Exchange, itemKey.RoutingKey, itemKey.QueueName);
                th.IsBackground = true;
                threadList.Add(th);
            }
            //sub 方式消费消息
            else
            {
                var consumer = QueueFactory <IConsumer> .Create();

                consumer.Subscribe(itemKey.Exchange, itemKey.QueueName, itemKey.RoutingKey, configModel.IsProperties, MqMessageExecute, false);
                Consumers.Add(consumer);
            }
        }
Exemplo n.º 2
0
        private void ParameterizedThreadStart(MqConsumerItemKey mqItemKey)
        {
            var configModel = TaskList.FirstOrDefault(t => t.Exchange == mqItemKey.Exchange && t.RoutingKey == mqItemKey.RoutingKey && t.QueueName == mqItemKey.QueueName);

            //创建一个消费者
            if (configModel.IsNull())
            {
                //记录日志
                LogHelper.LogInfo(logSource, string.Format("ParameterizedThreadStart 配置PULL方式消费者未找到业务配置: {0};{1};{2}", mqItemKey.Exchange, mqItemKey.RoutingKey, mqItemKey.QueueName));
                return;
            }
            var Consumer = QueueFactory <IConsumer> .Create();

            Consumers.Add(Consumer);
            if (configModel.MqMessageType == 0)
            {
                do
                {
                    Consumer.Pull(mqItemKey.Exchange, mqItemKey.QueueName, mqItemKey.RoutingKey, MqMessageExecute);
                    var timeInterval = configModel.TimeInterval == 0 ? 10 : configModel.TimeInterval;
                    Thread.CurrentThread.Join(timeInterval);
                }while (true);
            }
        }