背景
平常我們系統一般會涉及到一些使用第三方元件的情況,那麽我們如何去監測,第一時間知道元件是否可用。或者是元件沒報錯,但是沒法返回我們想要的數據。
問題窺探
一般做法是在呼叫的時候,如果是異常,就發出對應的報警,這是解決的方式,但是也會有對應的問題,就是這種方式屬於被動形式的報警,就是只有當使用者操作觸發的時候才知道,那麽我們怎麽主動的去知道元件是否可用,做對應的監控檢查呢。我們采用的方式是使用定時任務,去執行健康檢查。及時的去獲取資訊。
主要程式碼實作
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;
}
}
}