先附上两个项目的Github的地址
AntJob: NewLifeX/AntJob: 分布式任务调度系统,纯NET打造的重量级大数据实时计算平台,万亿级调度经验积累!面向中小企业大数据分析场景。 (github.com)
Hangfire: Hangfire – Background jobs and workers for .NET and .NET Core
先来粗略对比一下使用感受:
1.如果你的数据大多都是带时间戳的,那用Antjob可能会比较适合,Antjob的任务是一个连续的时间任务,没有周期这一说,时间跨度可以到天。
后台的任务代码:
protected override Int32 Execute(JobContext ctx)
{
Random ran = new Random();
int n = ran.Next(100);
// 当前任务时间
var start = ctx.Task.Start;
var end=ctx.Task.End;
WriteLog("当前任务时间:{0}", start);
// 成功处理数据量
return n;
}
从上下文中能很容易拿到当前任务所属时间范围, ctx.Task.Start、ctx.Task.End。
2.Hangfire传统的做法需要把job和服务端放在一起,这其实是很难实际运用到生产环境中的,因为你更新一个job,其他线上正在运行的job都会受到更新影响。所以一般都会使用第三方的扩展,这里使用的是Hangfire.HttpJob Home · yuzd/Hangfire.HttpJob Wiki (github.com)
在使用Hangfire.HttpJob的时候,可以很容易实现客户端与服务端的分离,官方的Hangfire负责任务调度,Hangfire.HttpJob把job封装成一个http请求提供给Hangfire调度,同时支持在线修改周期任务配置。基本的job功能都能实现,其他的多层级执行Success貌似还有问题,在一些没有回调的场景下也不影响使用。
总结:推荐AntJob,AntJob项目经过中通快递亿级数据的实战,在实际使用中有保证。Hangfire自身的项目不支持服务端与客户端的分离,而且第三方插件Hangfire.HttpJob是个人维护项目,没经过大数据实战,使用有风险。
下面是Hangfire控制面板的一些截图
图(1)· 周期性作业
图(2)·失败作业
Tags是对任务的分类查询
图(3)·Tag任务分类查询
图(4)·服务器汇总
图(5)·资源的监控