Exemple #1
0
 /// <summary>
 /// 是否在监听工作时间段
 /// </summary>
 /// <param name="queueName"></param>
 /// <returns></returns>
 public virtual bool IsListenerWorkTime(QueueMonitorOption option)
 {
     try
     {
         //if (string.IsNullOrEmpty(option.WorkTime))  //如果当前工作时间段为空(未配置),默认都在工作时间段内
         //{
         //    return true;
         //}
         //List<string> workTime = option.WorkTime.Split('-').ToList();
         //if (workTime != null && workTime.Count > 0)
         //{
         //    DateTime dtStartTime = Convert.ToDateTime(DateTime.Now.ToShortDateString() + " " + workTime[0]);
         //    DateTime dtEndTime = Convert.ToDateTime(DateTime.Now.ToShortDateString() + " " + workTime[1]);
         //    return
         //        workTime.Any(
         //            workTimes =>
         //                DateTime.Now.Ticks >= dtStartTime.Ticks && DateTime.Now.Ticks <= dtEndTime.Ticks);
         //}
         return(true);
     }
     catch (Exception ex)
     {
         log.Error("Listener.IsListenerWorkTime获取(" + option.QueueName + ")是否在工作时间段(" + option.WorkTime + ")异常:" + ex.Message, ex);
         return(false);
     }
 }
Exemple #2
0
        public override Dictionary <string, QueueMonitorOption> LoadOption()
        {
            log.Fatal("-------------------读取本地json配置开始(" + DateTime.Now + ")---------------------------------");
            Dictionary <string, QueueMonitorOption> dic = new Dictionary <string, QueueMonitorOption>();
            QueueMonitorOption        defaultOption     = GetDefault();
            List <QueueMonitorOption> optionList        = JsonConvert.DeserializeObject <List <QueueMonitorOption> >(File.ReadAllText(directory));

            foreach (var item in optionList)
            {
                item.AlarmMaxCount     = item.AlarmMaxCount <= 0 ? defaultOption.AlarmMaxCount: item.AlarmMaxCount;
                item.AlarmInterval     = item.AlarmInterval <= 0 ? defaultOption.AlarmInterval : item.AlarmInterval;
                item.ThresholdMaxCount = item.ThresholdMaxCount <= 0 ? defaultOption.ThresholdMaxCount : item.ThresholdMaxCount;

                if (dic.ContainsKey(item.QueueName))
                {
                    dic[item.QueueName] = item;
                }
                else
                {
                    dic.Add(item.QueueName, item);
                }
            }
            log.Fatal("刷新配置文件:" + JsonConvert.SerializeObject(optionList));
            log.Fatal("-------------------读取本地json配置结束(" + DateTime.Now + ")---------------------------------");
            //读取本地配置文件
            return(dic);
        }
        /// <summary>
        /// 开启监听
        /// </summary>
        /// <param name="queueName"></param>
        public override void StartListener(List <string> queueName)
        {
            StringBuilder strMessage = new StringBuilder();

            try
            {
                bool   isClearSucess = false;
                string msg           = "";
                //string wkTime = "";
                foreach (var item in queueName)
                {
                    QueueMonitorOption option = QueueMonitorOptionProvider.GetOption(item);
                    if (!IsListenerWorkTime(option))
                    {
                        strMessage.AppendLine("queuename:" + item + ",未在监听时间段(" + option.WorkTime + ")");
                        continue;
                    }
                    float count = _queueMonitor.GetCount(item);
                    strMessage.AppendLine("queuename:" + item + ",count:" + count);

                    if (option.ThresholdMaxCount <= count) //超出范围
                    {
                        if (option.IsClearQueue)           //是否要清空队列
                        {
                            isClearSucess = _queueMonitor.ClearQueue(item);
                        }
                        msg = "queueName:" + item + ",count:" + count + ",ThresholdMaxCount:" + option.ThresholdMaxCount + ",isClearSucess:" + isClearSucess;
                        strMessage.AppendLine(msg);
                        log.Error(msg);
                        AlarmManger.AlaramAsync(new AlarmOption()
                        {
                            Ip = ConfigurationManager.AppSettings["ServerIp"],
                            CurrentQueueCount = count,
                            QueueOption       = option,
                            isClearSucess     = isClearSucess
                        });
                    }
                    else
                    {
                        AlarmManger.ClearAlaramCache(item);
                    }
                }
            }
            catch (Exception ex)
            {
                log.Error("监听异常:" + ex.Message, ex);
                strMessage.AppendLine("监听异常:" + ex.Message);
            }
            finally
            {
                log.Info(strMessage.ToString());
            }
        }