/// <summary>
        /// 重新连接
        /// </summary>
        /// <param name="connection"></param>
        /// <param name="handler"></param>
        /// <param name="exChangeName"></param>
        /// <param name="queueName"></param>
        /// <param name="routingKey"></param>
        /// <param name="isNeedDLX"></param>
        /// <returns></returns>
        private static IModel Consume(IConnection connection, Func <string, Task <ConsumeActionEnum> > handler, RMQSubscribeModel subscribeModel)
        {
            var channel  = DefineQueue(connection, subscribeModel);
            var consumer = new EventingBasicConsumer(channel);
            ConsumeActionEnum        consumeResult = ConsumeActionEnum.RETRY;
            Task <ConsumeActionEnum> result;

            consumer.Received += async(ch, ea) =>
            {
                var body    = ea.Body;
                var message = Encoding.UTF8.GetString(body);
                result        = handler(message);
                consumeResult = await result;
                if (consumeResult == ConsumeActionEnum.ACCEPT)
                {
                    channel.BasicAck(ea.DeliveryTag, false);  //消息从队列中删除
                }
                else if (consumeResult == ConsumeActionEnum.RETRY)
                {
                    channel.BasicNack(ea.DeliveryTag, false, true); //消息重回队列
                }
                else
                {
                    channel.BasicNack(ea.DeliveryTag, false, false); //消息直接丢弃
                }
            };
            channel.BasicConsume(subscribeModel.QueueName, false, consumer);
            return(channel);
        }
        /// <summary>
        /// 拉模式消费死信队列
        /// </summary>
        /// <returns></returns>
        public static async Task <IModel> PullMessageConsumeForDLXAsync(Func <string, Task <ConsumeActionEnum> > handler, RMQSubscribeModel subscribeModel)
        {
            var connection = RabbitMQBaseHelper.CreateMQConnectionInPoolNew();
            // var channel = connection.CreateModel();
            var            channel  = DefineQueue(connection, subscribeModel);
            BasicGetResult response = channel.BasicGet(RabbitMQConstant.DLXPrefix + subscribeModel.QueueName, false);

            if (response != null)
            {
                string                   message       = Encoding.UTF8.GetString(response.Body);
                ConsumeActionEnum        consumeResult = ConsumeActionEnum.RETRY;
                Task <ConsumeActionEnum> result        = handler(message);
                consumeResult = await result;
                if (consumeResult == ConsumeActionEnum.ACCEPT)
                {
                    channel.BasicAck(response.DeliveryTag, false);  //消息从队列中删除
                }
                else if (consumeResult == ConsumeActionEnum.RETRY)
                {
                    channel.BasicNack(response.DeliveryTag, false, true); //消息重回队列
                }
                else
                {
                    channel.BasicNack(response.DeliveryTag, false, false); //消息直接丢弃
                }
            }
            else
            {
                Console.WriteLine($"{RabbitMQConstant.DLXPrefix + subscribeModel.QueueName}暂无可消费信息");
            }
            RabbitMQBaseHelper.ResetMQConnectionToFree(connection);
            return(channel);
        }