當前位置: 妍妍網 > 碼農

巧用定時任務監控第三方元件是否正常

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