예제 #1
0
        /// <summary>
        /// 关闭定时器
        /// </summary>
        public static void Stop()
        {
            try
            {
                if (_mqTimer != null)
                {
                    _mqTimer.Dispose();
                    _mqTimer = null;
                }
            }
            catch
            {
                // ignored
            }

            //关闭MQ
            LongRunRabbitConsumer.StopConsumer();

            //关闭消息处理
            RMqMessageHandler.Stop();
        }
예제 #2
0
        /// <summary>
        /// MQ回调
        /// </summary>
        /// <param name="state"></param>
        private static void MqTimerCallBack(object state)
        {
            lock (Slocker)
            {
                if (_isRunning)
                {
                    return;
                }
                _isRunning = true;
            }

            try
            {
                if (!LongRunRabbitConsumer.IsAlive())
                {
                    Thread.Sleep(5500);

                    //延迟,使其能够自动恢复
                    if (!LongRunRabbitConsumer.IsAlive())
                    {
                        if (_isFirstTimeToStartMq)
                        {
                            _isFirstTimeToStartMq = false;

                            NLogHelper.Debug("首次尝试启动MQConsumer");
                            LongRunRabbitConsumer.StartConsumer(ex =>
                            {
                                NLogHelper.Error($"开启MQ失败:{ex}");
                            });
                        }
                        else
                        {
                            _restartCount++;
                            if (_restartCount > 10000000)
                            {
                                _restartCount = 10000;
                            }
                            NLogHelper.Warn($"MQ异常,第{_restartCount}次尝试重启 MQConsumer");
                            LongRunRabbitConsumer.StartConsumer(ex =>
                            {
                                NLogHelper.Error($"开启MQ失败:{ex}");
                            });
                        }
                    }
                }
                else
                {
                    NLogHelper.Trace("检测MQ连接正常");
                }
            }
            catch (Exception ex)
            {
                NLogHelper.Error("MQ定时器异常:" + ex);
            }
            finally
            {
                lock (Slocker)
                {
                    _isRunning = false;
                }
            }
        }