Furion.Pure 定时任务调度

发布时间:2026/7/23 14:57:56
Furion.Pure 定时任务调度 定时任务调度一、核心功能定时任务调度是 Furion.Pure 框架提供的轻量级作业调度系统支持多种触发方式和分布式部署。1.1 核心价值多种触发方式支持 Cron 表达式、周期触发、一次性触发等分布式支持支持集群部署避免任务重复执行可视化管理提供 Web Dashboard 管理界面持久化存储支持任务执行记录持久化灵活配置支持属性配置和代码配置二、触发方式2.1 Cron 表达式触发使用[Cron]特性配置 Cron 表达式[Cron(0 0 2 * * ?)]publicclassDailyReportJob:IJob{publicasyncTaskExecuteAsync(JobExecutingContextcontext){// 每天凌晨 2 点执行}}2.2 周期触发使用[Period]特性配置固定周期[Period(Seconds60)]publicclassHeartbeatJob:IJob{publicasyncTaskExecuteAsync(JobExecutingContextcontext){// 每 60 秒执行一次}}2.3 快捷周期特性框架提供了多种快捷周期特性特性说明[Secondly]每秒执行[Minutely]每分钟执行[Hourly]每小时执行[Daily]每天执行[Weekly]每周执行[Monthly]每月执行[Yearly]每年执行2.4 指定时间触发使用[DailyAt]、[HourlyAt]等特性指定具体时间[DailyAt(08:00,18:00)]publicclassWorkTimeJob:IJob{publicasyncTaskExecuteAsync(JobExecutingContextcontext){// 每天 8 点和 18 点执行}}三、实现流程3.1 服务注册在Startup.cs中调用services.AddSchedule();注册逻辑步骤操作说明1构建调度器配置创建ScheduleOptionsBuilder2注册日志服务添加IScheduleLogger3注册调度器工厂添加ISchedulerFactory4注册取消 Token添加IJobCancellationToken5注册后台服务添加ScheduleHostedService3.2 作业执行流程┌─────────────────────────────────────────────────────────────┐ │ 调度器启动阶段 │ ├─────────────────────────────────────────────────────────────┤ │ 1. ScheduleHostedService 启动 │ │ └── 创建调度器实例 │ ├─────────────────────────────────────────────────────────────┤ │ 2. 扫描所有实现 IJob 的类 │ │ └── 注册到调度器 │ ├─────────────────────────────────────────────────────────────┤ │ 3. 根据触发配置计算下次执行时间 │ │ └── 注册到触发器队列 │ └─────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────┐ │ 作业执行阶段 │ ├─────────────────────────────────────────────────────────────┤ │ 1. 触发器触发 │ │ └── 创建作业执行上下文 │ ├─────────────────────────────────────────────────────────────┤ │ 2. 调用作业执行器 │ │ └── 执行 IJob.ExecuteAsync() │ ├─────────────────────────────────────────────────────────────┤ │ 3. 记录执行结果 │ │ └── 更新持久化存储 │ └─────────────────────────────────────────────────────────────┘四、作业上下文JobExecutingContext提供了丰富的上下文信息publicclassJobExecutingContext{/// summary/// 作业 ID/// /summarypublicstringJobId{get;}/// summary/// 作业名称/// /summarypublicstringJobName{get;}/// summary/// 触发类型/// /summarypublicTriggerTypeTriggerType{get;}/// summary/// 执行次数/// /summarypublicintExecuteCount{get;}/// summary/// 取消 Token/// /summarypublicCancellationTokenCancellationToken{get;}/// summary/// 作业参数/// /summarypublicobject[]Arguments{get;}}五、配置选项ScheduleOptionsBuilder提供了丰富的配置项配置项默认值说明ClusterIdnull集群 ID用于分布式部署LogEnabledtrue是否启用日志UnobservedTaskExceptionHandlernull未处理异常处理器5.1 配置示例services.AddSchedule(options{options.ClusterIdcluster-001;options.LogEnabledtrue;options.UnobservedTaskExceptionHandler(sender,args){// 处理未观察到的异常};});六、高级特性6.1 分布式部署配置ClusterId实现分布式部署services.AddSchedule(options{options.ClusterIdproduction-cluster;});框架会自动协调集群中的任务执行确保同一任务只在一个节点上执行。6.2 作业参数通过特性传递参数[JobDetail(Argumentsnewobject[]{param1,123})][Cron(0 0 * * * ?)]publicclassParameterizedJob:IJob{publicasyncTaskExecuteAsync(JobExecutingContextcontext){varparam1context.Arguments[0]asstring;varparam2(int)context.Arguments[1];}}6.3 作业监控实现IJobMonitor接口监控作业执行publicclassJobMonitor:IJobMonitor{publicvoidOnExecuting(JobExecutingContextcontext){// 作业开始执行}publicvoidOnExecuted(JobExecutedContextcontext){// 作业执行完成}}6.4 持久化存储实现IJobPersistence接口自定义持久化存储publicclassCustomJobPersistence:IJobPersistence{publicTaskSaveExecutionRecordAsync(JobExecutionRecordrecord){// 保存执行记录}publicTaskListJobExecutionRecordGetExecutionRecordsAsync(stringjobId){// 获取执行记录}}6.5 动态作业支持动态创建和注册作业publicclassJobController{privatereadonlyISchedulerFactory_schedulerFactory;publicJobController(ISchedulerFactoryschedulerFactory){_schedulerFactoryschedulerFactory;}publicvoidAddJob(){varscheduler_schedulerFactory.Create();scheduler.ScheduleMyDynamicJob().Cron(0 0 1 * * ?).Build();}}七、Dashboard框架提供了 Web Dashboard 用于可视化管理作业7.1 启用 Dashboardservices.AddSchedule(options{options.UseDashboard();});7.2 访问地址默认访问地址http://localhost:5000/schedule7.3 Dashboard 功能功能说明作业列表查看所有已注册的作业执行记录查看作业执行历史手动触发手动触发作业执行暂停/恢复暂停或恢复作业八、核心文件文件说明ScheduleServiceCollectionExtensions.cs调度服务扩展方法IJob.cs作业接口IScheduler.cs调度器接口ISchedulerFactory.cs调度器工厂接口Trigger.cs触发器基类CronTrigger.csCron 表达式触发器PeriodTrigger.cs周期触发器JobExecutingContext.cs作业执行上下文ScheduleHostedService.cs调度后台服务ScheduleLogger.cs调度日志服务九、总结定时任务调度通过灵活的触发配置和强大的扩展能力实现了轻量级的作业调度系统。核心设计思想声明式配置通过特性声明作业触发规则无需手动注册多触发方式支持 Cron 表达式、周期触发、指定时间触发等多种方式分布式支持内置集群协调机制支持分布式部署可视化管理提供 Web Dashboard 便于监控和管理高度可扩展支持自定义持久化、监控和触发器这种设计使得开发者可以轻松实现定时任务无需引入复杂的第三方调度框架。