检查系统状态和通知用户的经典要求。具体来说,我将每隔x个时间点击一次数据库,获取一些数据,然后根据结果发送电子邮件通知。哎呀,这项服务甚至可能不会发送电子邮件,而是在数据库中创建通知记录。
似乎与IOC和配置一样,可以有一个通用的Windows服务,以简单的方式管理所有这些,以及指标和管理。
过去我通过以下方式完成了电子邮件通知: 1)将脚本作为cron(在Windows上)作业运行 2)将自定义可执行文件作为cron / at jobs运行 3)使用SQLServer的DatabaseMail之类的东西。 4)自定义NT服务,一直运行监视事物。
是否有任何开源项目可以管理这个?这是我在各种平台上写过很多次的代码类型,但现在不想花几天时间来完成它。
到目前为止我唯一发现的是Quartz.Net
由于
答案 0 :(得分:0)
我只是创建一个Windows服务并使用Reactive Extensions来安排任务。如果您不需要像cron提供的那么多灵活性,这可以正常工作。这是一个抽象的每小时任务运行器。 (使用log4net)
public abstract class HourlyTask : IWantToRunAtStartup
{
protected readonly ILog Log = LogManager.GetLogger(typeof (HourlyTask).FullName);
private IDisposable _Subscription;
private void ExecuteWithLog()
{
Log.Debug("Triggering " + GetType());
try
{
Execute();
}
catch (Exception exception)
{
Log.Error("Hourly execution failed", exception);
}
}
public abstract void Execute();
public void Run()
{
_Subscription = Observable
.Interval(TimeSpan.FromMinutes(1))
.Select(x => DateTime.Now.Hour)
.DistinctUntilChanged()
.Subscribe(i => ExecuteWithLog());
}
public void Stop()
{
if (_Subscription == null)
{
return;
}
_Subscription.Dispose();
}
}
然后,在启动方法中,您只需解析所有IWantToRunAtStartup
个实例,然后在其上调用Run()
。