/// <summary>
        /// 交换机发送消息
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="exchangeName"></param>
        /// <param name="msg"></param>
        /// <param name="routingKey"></param>
        /// <param name="exchangeType"></param>
        /// <param name="isTask"></param>
        /// <param name="durable"></param>
        public void SendMessageByExchange <T>(string exchangeName, T msg, string routingKey = "", string exchangeType = "direct", bool isTask = true, bool?durable = null) where T : class
        {
            var message = SerializeObject(msg);

            PollyHelper.GetRetryTimesPolicy(2, ex =>
            {
                if (isTask)
                {
                    var task = new Task(() => { SendMsgByExchange(exchangeName, message, exchangeType, routingKey, durable); });
                    TasksCache.Enqueue(task);
                }
                else
                {
                    throw ex;
                }
            }).Execute(() => { SendMsgByExchange(exchangeName, message, exchangeType, routingKey, durable); });
        }
        private static readonly ConcurrentQueue <Task> TasksCache = new ConcurrentQueue <Task>(); //缓存队列

        #region 公有函数

        /// <summary>
        /// 发送消息
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="qName"></param>
        /// <param name="msg"></param>
        /// <param name="isTask"></param>
        /// <param name="durable"></param>
        public void SendMessage <T>(string qName, T msg, bool isTask = true, bool?durable = null) where T : class
        {
            var message = SerializeObject(msg);

            PollyHelper.GetRetryTimesPolicy(2, ex =>
            {
                if (isTask)
                {
                    var task = new Task(() => { SendMsg(qName, message, durable); });
                    TasksCache.Enqueue(task);
                }
                else
                {
                    throw ex;
                }
            }).Execute(() => { SendMsg(qName, message, durable); });
        }