背景
平常我们系统一般会涉及到一些使用第三方组件的情况,那么我们如何去监测,第一时间知道组件是否可用。或者是组件没报错,但是没法返回我们想要的数据。
问题窥探
一般做法是在调用的时候,如果是异常,就发出对应的报警,这是解决的方式,但是也会有对应的问题,就是这种方式属于被动形式的报警,就是只有当用户操作触发的时候才知道,那么我们怎么主动的去知道组件是否可用,做对应的监控检查呢。我们采用的方式是使用定时任务,去执行健康检查。及时的去获取信息。
主要代码实现
using NLog;
using System;
using System.Collections.Generic;namespace ResearchManager.WinService.Jobs.Monitor
{public abstract class BaseMonitorJob : BaseQuartzJob{protected abstract List<string> DoMonitorJob();protected override void DoJob(){List<string> errorMsgList = null;try{errorMsgList = DoMonitorJob();}catch (Exception ex){if (errorMsgList == null){errorMsgList = new List<string>();}errorMsgList.Add(ex.ToString());}if (errorMsgList != null){string logMsg = string.Format("{0}, errorMsgList={1}", GetType().Name, string.Join("\n", errorMsgList));Common.Log(logMsg);if (errorMsgList.Count > 0){Common.Log(LogLevel.Error, logMsg);string subject = "BigTracker 資料監控錯誤通知";string content = string.Join("<br/>", errorMsgList);Common.ErrorHandle(subject, content);}}}}
}
using Autofac;
using ResearchManager.Interface.Service;
using System.Collections.Generic;namespace ResearchManager.WinService.Jobs.Monitor
{/// <summary>/// 商品调研分析 监测/// </summary>public class MonitorProductResearchStatisticJob : BaseMonitorJob{protected override List<string> DoMonitorJob(){IMonitorService monitorService = AutofacConfig.Instance.Resolve<IMonitorService>();List<string> errorMsgList = new List<string>();monitorService.TestProductResearchStatistic(ref errorMsgList);return errorMsgList;}}
}