当前位置: 欣欣网 > 码农

巧用定时任务监控第三方组件是否正常

2024-05-10码农

背景

平常我们系统一般会涉及到一些使用第三方组件的情况,那么我们如何去监测,第一时间知道组件是否可用。或者是组件没报错,但是没法返回我们想要的数据。

问题窥探

一般做法是在调用的时候,如果是异常,就发出对应的报警,这是解决的方式,但是也会有对应的问题,就是这种方式属于被动形式的报警,就是只有当用户操作触发的时候才知道,那么我们怎么主动的去知道组件是否可用,做对应的监控检查呢。我们采用的方式是使用定时任务,去执行健康检查。及时的去获取信息。

主要代码实现

 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;
}
}
}