Esempio n. 1
0
        /// <summary>
        /// 投递消息,带重试功能
        /// </summary>
        /// <param name="message"></param>
        static void TryDeliverMessage(MessageEntity message)
        {
            var deliverMessage = new DeliverMessageModel(message);

            TryDeliverMessage(deliverMessage);
            if (!deliverMessage.IsFinish)
            {
                _retryDeliverMessages.Add(deliverMessage);
                if (!_IsRetryTimerRunning)
                {
                    _deliverMessageTimer.Change(RetryDueTime, Timeout.Infinite);
                    _IsRetryTimerRunning = true;
                }
            }
        }
Esempio n. 2
0
        /// <summary>
        /// 投递消息,带重试功能
        /// </summary>
        /// <param name="deliverMessage"></param>
        static void TryDeliverMessage(DeliverMessageModel deliverMessage)
        {
            if (deliverMessage == null || deliverMessage.Message == null)
            {
                return;
            }
            if (deliverMessage.DeliverCount == 0)
            {
                Logger.InfoFormat("开始推送消息, Message:[{0}]", deliverMessage.Message.ToString());
            }
            else
            {
                Logger.InfoFormat("开始尝试第 {0} 次推送消息, Message:[{1}]",
                                  deliverMessage.DeliverCount, deliverMessage.Message.ToString());
            }
            var result = DeliverMessage(deliverMessage.Message);

            if (result)
            {
                deliverMessage.IsFinish = true;
            }
            else if (deliverMessage.Message.NoRetry)
            {
                deliverMessage.IsFinish = true;
            }
            else
            {
                if (deliverMessage.DeliverCount >= MaxRetryCount)
                {
                    deliverMessage.IsFinish = true;
                    Logger.Info("取消推送消息,重试次数超过最大重试上限");
                }
                else
                {
                    deliverMessage.DeliverCount++;
                }
            }
        }