private void ReceiveMessage(MqQueueName queueName, Action<string> action)
        {
            IModel channel = null;
            try
            {
                if (_connection == null || !_connection.IsOpen)
                    NewConnection();

                //创建通道
                channel = _connection.CreateModel();

                //创建队列
                channel.QueueDeclare(queueName.ToString(), true, false, false, null);

                channel.BasicQos(0, 1, false);
                var consumer = new QueueingBasicConsumer(channel);
                channel.BasicConsume(queueName.ToString(), false, consumer);

                while (true)
                {
                    string message = "";
                    try
                    {
                        var ea = consumer.Queue.Dequeue();
                        message = Encoding.UTF8.GetString(ea.Body);
                        //处理消息
                        action(message);
                        //发送确认回执
                        channel.BasicAck(ea.DeliveryTag, false);
                    }
                    catch (Exception ex)
                    {
                        LogHelper.Fatal("RabbitMQ消费者处理消息失败。消息内容:" + queueName + "," + message, ex);
                    }
                }
            }
            catch (Exception ex)
            {
                LogHelper.Fatal("RabbitMQ接收和解析消息失败。", ex);
            }
            finally
            {
                if (channel != null)
                {
                    channel.Close();
                }
            }
        }
        /// <summary>
        /// 发送消息到MQ服务器
        /// </summary>
        /// <param name="queueName">队列名称</param>
        /// <param name="json">JSON格式的消息</param>
        public void SendMessage(MqQueueName queueName, string json)
        {
            if (_queue.Count > _maxLength)
            {
                lock (_queue.SyncRoot)
                {
                    Monitor.Wait(_queue.SyncRoot);
                }
            }

            _queue.Enqueue(queueName + "," + json);
            lock (_queueReadLock)
            {
                Monitor.Pulse(_queueReadLock);
            }
        }
 /// <summary>
 /// 为消息队列创建多个消费者线程
 /// </summary>
 /// <param name="queueName"></param>
 /// <param name="action"></param>
 /// <param name="batchSize"></param>
 private void BatchReceiveMessage(MqQueueName queueName, Action<string> action, int batchSize)
 {
     for (int i = 0; i < batchSize; i++)
     {
         Thread thread = new Thread((o) =>
         {
             object[] os = o as object[];
             ReceiveMessage((MqQueueName)os[0], os[1] as Action<string>);
         });
         thread.IsBackground = true;
         thread.Start(new object[] { queueName, action });
         _rcvMsgThreadListInExclusiveMode.Add(thread);
     }
 }
        /// <summary>
        /// 使用共享模式接收消息。共享模式创建多个消息读取线程,用于所有消息队列的消息读取
        /// </summary>
        /// <param name="queueName"></param>
        /// <param name="action"></param>
        public void ReceiveMessageBySharingMode(MqQueueName queueName, Action<string> action)
        {
            if (_msgReceiverDic.ContainsKey(queueName))
                return;
            else
                _msgReceiverDic.Add(queueName, action);

            DisableReceiveMsgInExclusiveMode();
            if (_rcvMsgThreadListInSharingMode.Count == 0)
                BatchReceiveMessage(MqConcurrentSizeInSharingMode);
        }