EN: AntJob is a high-throughput distributed job scheduling & real-time computing platform for .NET, focusing on massive (10^11+) task slicing, reliable retry and elastic horizontal scaling. Chinese documentation below is the canonical version.
using AntJob;
using HisAgent;
using NewLife.Log;
using NewLife.Model;
using Stardust;
// 启用控制台日志,拦截所有异常
XTrace.UseConsole();
var services = ObjectContainer.Current;
services.AddStardust();
services.AddAntJob()
.AddHandler<HelloJob>();
// 友好退出
var host = services.BuildHost();
await host.RunAsync();
添加第一个定时调度作业处理器:
using System;
using AntJob;
internal class HelloJob : Handler
{
public HelloJob() => Job.Cron = "7/30 * * * * ?";
public override Int32 Execute(JobContext ctx)
{
// 当前任务时间
var time = ctx.Task.Time;
WriteLog("新生命蚂蚁调度系统!当前任务时间:{0}", time);
return 1; // 成功处理数据量
}
}
using System;
using AntJob;
internal class HelloJob : Handler
{
public HelloJob() => Job.Cron = "7/30 * * * * ?";
public override async Task<Int32> ExecuteAsync(JobContext ctx)
{
using var span = Tracer?.NewSpan("HelloJob", ctx.Task.DataTime);
// 当前任务时间
var time = ctx.Task.DataTime;
WriteLog("新生命蚂蚁调度系统!当前任务时间:{0}", time);
if (!ctx.Task.Data.IsNullOrEmpty()) WriteLog("数据:{0}", ctx.Task.Data);
var state = Rand.NextString(16);
var http = new HttpClient { BaseAddress = new Uri("https://newlifex.com") };
http.SetUserAgent();
var rs = await http.GetAsync<IDictionary<String, Object>>("/cube/info", new { state });
if (rs.TryGetValue("state", out var value) && value is String str)
{
Trace.Assert(state == str, "返回状态不一致");
}
// 成功处理数据量
return 1;
}
}
sequenceDiagram
participant App as 作业应用
participant Server as 调度中心AntServer
participant Web as 控制台AntWeb
App->>Server: app登录
Note over Server: app/secret
App-->>Server: 注册作业
Web->>Server: 设置参数
Web->>Server: 启动作业
App->>Server: 申请作业任务
Server-->>App: 返回任务
Note over App: 多线程处理任务
App-->>Server: 上报局部状态
Note over Web: 作业状态看板
App->>Server: 处理成功
App-->>Server: 处理失败
App-->>Server: 延迟处理
调度中心主从架构
sequenceDiagram
participant App1 as 作业应用
participant Server1 as 调度中心
participant DB as 数据库
participant Server2 as 调度中心2
participant App2 as 作业应用2
participant App3 as 作业应用3
participant App4 as 作业应用4
participant Web as Web控制台
App1->>Server1: 登录
Server1->>DB: 连接
App1-->>Server2: 故障转移
Server2->>DB: 连接
App2->>Server1: 登录
App3->>Server1: 登录
App4->>Server1: 登录
Web-->>Server1: 监控
NewLife.AntJob - 蚂蚁调度
蚂蚁调度 AntJob - 分布式任务/数据调度系统
分布式任务调度系统,纯 .NET 打造的重量级大数据实时计算平台,万亿级调度经验积累!面向中小企业乃至大型集团大数据分析与实时 / 离线混合计算场景。
开源地址:https://github.com/NewLifeX/AntJob
使用教程:https://newlifex.com/blood/antjob
体验地址(托管演示环境):http://ant.newlifex.com
目录 (Table of Contents)
1. 背景与定位
AntJob 以 “蚂蚁搬家” 思想把任意大任务切分成可并行的小片段,天然适合:
蚂蚁搬家思想诞生于 2008 年金融危机期间的上海陆家嘴,回应金融机构对低成本、高效率数据分析能力的紧急诉求。对标类:XxlJob、Quartz、Hangfire、Airflow(部分场景)、自研定时脚本集群等;但 AntJob 更强调“数据/时间切片+重试+多模式统一”和对企业内已有 .NET 生态的无侵入集成。
2. 核心特性速览
3. 架构与组成组件
组件说明:
4. 调度模式详解
5. 快速开始
5.1 模板方式(推荐)
5.2 手工最小示例
参见下文 “设计示例” 段落。
5.3 仅本地文件调度(离线 / 单机测试)
不配置 NetworkJobProvider 时使用默认本地 Provider,适合调试。
5.4 引入 Web 控制台
部署 AntJob.Web(IIS / Kestrel / Docker)后修改客户端配置 Server 指向其服务地址即可。
5.5 Docker(示意)
6. 典型部署拓扑
7. 目录结构说明(摘取关键)
8. 配置说明
核心客户端配置类:
AntSettingtcp://a:9999,tcp://b:9999Web/Server 侧:
9. 扩展机制
Handler,重写Execute(JobContext ctx)返回成功处理数量IJobProvider(如:Kafka / Redis Stream / REST)MessageHandler推送任意消息体形成任务SqlMessage+DataHandler扫描数据并切片CSharpHandler允许以脚本方式快速试错(生产需限制权限)10. 可靠性 & 一致性
11. 性能与容量规划
12. 对比(概述)
13. 常见问题 (FAQ)
Q: 作业注册后为什么默认停止?
A: 防止未配置参数即大量启动;需在 Web 控制台手动启用。
Q: 如何回溯重算一个月数据?
A: 在作业面板修改开始时间/重置指定时间段或批量选择任务重置。
Q: 任务失败是否会阻塞后续?
A: 不会;失败任务延迟重试,其它窗口继续调度。
Q: 能否只用 Http/WebSocket 接入?
A: v4 规划中(待 Remoting WebSocketClient),届时轻量场景无需独立 AntServer。
Q: 如何限制脚本风险?
A: 关闭未使用的 CSharpHandler;或隔离运行进程 + 最小权限配置。
14. Roadmap(补充 v4 外)
15. 核心概念回顾
16. 设计示例(定时调度)
以下源码位于 Samples/HisAgent
新建项目
新建 .NET Core 3.1+ 项目,从 NuGet 引用 AntJob。实例化一个调度器 Scheduler,配置网络提供者。
添加第一个定时调度作业处理器:
作业处理器必须继承
Handler并重写Execute实现业务逻辑。构造函数中设定的 Time、Step 仅首次注册使用,后续修改在控制台完成。或者使用异步处理的定时调度作业处理器:
编译 & 运行
首次运行会自动尝试连接
tcp://127.0.0.1:9999与tcp://ant.newlifex.com:9999(主备机制),来源于AntSetting配置。日志示例:
Web 作业管理与重置
在 Web 控制台启用作业后,调度中心将按时间点切分任务并分发。可查看任务明细、错误重试、批量重置以回溯计算。
分布式并行
多开若干 Agent,任务由调度中心分派,任一任务只会被一个节点执行;失败将按策略重试,提升整体吞吐与稳定性。
17. 核心功能模块(简表)
18. v4 架构升级 (进展)
v4 亮点:
19. 功能特点(算法与能力)
蚂蚁算法:把任意大数据拆分成小块并行计算(类似“馒头被蚂蚁搬家”)。2008 年诞生,历经基金短信群发、快递 1200 万/日订单处理、百亿级数据清洗、万亿级年度调度实践打磨。聚焦分布式切片与集中调度能力,已验证百亿级调度规模。
主要功能点(回顾):
20. 设计概要 & 系统架构(原示意)
计算型应用(实现 IJob)
调度中心主从架构
21. 新生命项目矩阵
各项目默认支持net9.0/netstandard2.1/netstandard2.0/net4.62/net4.5,旧版(2024.0801)支持net4.0/net2.0
新生命开发团队
新生命团队(NewLife)成立于2002年,是新时代物联网行业解决方案提供者,致力于提供软硬件应用方案咨询、系统架构规划与开发服务。
团队主导的80多个开源项目已被广泛应用于各行业,Nuget累计下载量高达400余万次。
团队开发的大数据中间件NewLife.XCode、蚂蚁调度计算平台AntJob、星尘分布式平台Stardust、缓存队列组件NewLife.Redis以及物联网平台FIoT,均成功应用于电力、高校、互联网、电信、交通、物流、工控、医疗、文博等行业,为客户提供了大量先进、可靠、安全、高质量、易扩展的产品和系统集成服务。
我们将不断通过服务的持续改进,成为客户长期信赖的合作伙伴,通过不断的创新和发展,成为国内优秀的IoT服务供应商。
新生命团队始于2002年,部分开源项目具有20年以上漫长历史,源码库保留有2010年以来所有修改记录网站:https://newlifex.com
开源:https://github.com/newlifex
QQ群:1600800/1600838
微信公众号: