You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
10 KiB
10 KiB
Quartz.NET集成
**本文档引用的文件** - [AbpBackgroundTasksQuartzModule.cs](file://aspnet-core/modules/task-management/LINGYUN.Abp.BackgroundTasks.Quartz/LINGYUN/Abp/BackgroundTasks/Quartz/AbpBackgroundTasksQuartzModule.cs) - [AbpQuartzSqlInstallerModule.cs](file://aspnet-core/modules/task-management/LINGYUN.Abp.Quartz.SqlInstaller/LINGYUN/Abp/Quartz/SqlInstaller/AbpQuartzSqlInstallerModule.cs) - [IQuartzSqlInstaller.cs](file://aspnet-core/modules/task-management/LINGYUN.Abp.Quartz.SqlInstaller/LINGYUN/Abp/Quartz/SqlInstaller/IQuartzSqlInstaller.cs) - [MySqlQuartzSqlInstaller.cs](file://aspnet-core/modules/task-management/LINGYUN.Abp.Quartz.MySqlInstaller/LINGYUN/Abp/Quartz/MySqlInstaller/MySqlQuartzSqlInstaller.cs) - [SqlServerQuartzSqlInstaller.cs](file://aspnet-core/modules/task-management/LINGYUN.Abp.Quartz.SqlServerInstaller/LINGYUN/Abp/Quartz/SqlServerInstaller/SqlServerQuartzSqlInstaller.cs) - [QuartzJobScheduler.cs](file://aspnet-core/modules/task-management/LINGYUN.Abp.BackgroundTasks.Quartz/LINGYUN/Abp/BackgroundTasks/Quartz/QuartzJobScheduler.cs) - [QuartzJobListener.cs](file://aspnet-core/modules/task-management/LINGYUN.Abp.BackgroundTasks.Quartz/LINGYUN/Abp/BackgroundTasks/Quartz/QuartzJobListener.cs) - [QuartzTriggerListener.cs](file://aspnet-core/modules/task-management/LINGYUN.Abp.BackgroundTasks.Quartz/LINGYUN/Abp/BackgroundTasks/Quartz/QuartzTriggerListener.cs) - [AbpQuartzSqlInstallerOptions.cs](file://aspnet-core/modules/task-management/LINGYUN.Abp.Quartz.SqlInstaller/LINGYUN/Abp/Quartz/SqlInstaller/AbpQuartzSqlInstallerOptions.cs) - [appsettings.Development.json](file://aspnet-core/services/LY.MicroService.TaskManagement.HttpApi.Host/appsettings.Development.json)目录
引言
本文档详细阐述了Quartz.NET在ABP框架中的集成机制,重点介绍作业调度、持久化存储、集群模式配置以及与ABP依赖注入系统的整合。文档涵盖从数据库初始化到作业生命周期管理的完整流程,并提供实际应用示例。
项目结构
Quartz.NET集成主要分布在task-management模块中,包含核心调度器、SQL安装器和数据库特定实现。结构如下:
graph TD
A[Quartz.NET集成] --> B[核心调度模块]
A --> C[SQL安装器模块]
A --> D[数据库安装器]
D --> E[MySQL安装器]
D --> F[SQL Server安装器]
B --> G[QuartzJobScheduler]
B --> H[QuartzJobListener]
B --> I[QuartzTriggerListener]
C --> J[AbpQuartzSqlInstallerModule]
C --> K[IQuartzSqlInstaller]
图示来源
- AbpBackgroundTasksQuartzModule.cs
- AbpQuartzSqlInstallerModule.cs
- IQuartzSqlInstaller.cs
本节来源
- AbpBackgroundTasksQuartzModule.cs
- AbpQuartzSqlInstallerModule.cs
核心组件
系统通过QuartzJobScheduler实现ABP的IJobScheduler接口,提供完整的作业调度功能。QuartzJobListener和QuartzTriggerListener用于监听作业执行生命周期。IQuartzSqlInstaller接口及其实现负责数据库初始化。
本节来源
- QuartzJobScheduler.cs
- QuartzJobListener.cs
- QuartzTriggerListener.cs
架构概述
系统采用分层架构,将Quartz调度器与ABP框架深度集成。配置层通过AbpQuartzOptions管理Quartz属性,持久化层通过JobStore实现数据存储,调度层通过IScheduler提供作业管理功能。
graph TB
subgraph "ABP框架层"
A[依赖注入系统]
B[事件总线]
C[日志系统]
end
subgraph "Quartz集成层"
D[QuartzJobScheduler]
E[QuartzJobListener]
F[QuartzTriggerListener]
end
subgraph "Quartz核心"
G[IScheduler]
H[IJobStore]
I[JobDetail]
J[Trigger]
end
subgraph "持久化层"
K[MySQL]
L[SQL Server]
end
A --> D
B --> E
C --> E
D --> G
G --> H
H --> K
H --> L
图示来源
- QuartzJobScheduler.cs
- QuartzJobListener.cs
- QuartzTriggerListener.cs
详细组件分析
核心调度器分析
QuartzJobScheduler作为核心调度组件,实现了IJobScheduler接口,提供作业的创建、删除、暂停、恢复等操作。
classDiagram
class QuartzJobScheduler {
+IJobStore JobStore
+IScheduler Scheduler
+IQuartzKeyBuilder KeyBuilder
+IQuartzJobCreator QuartzJobCreator
+ExistsAsync(JobInfo) bool
+PauseAsync(JobInfo) Task
+PublishAsync(JobInfo) Task
+QueueAsync(JobInfo) Task
+QueuesAsync(IEnumerable~JobInfo~) Task
+RemoveAsync(JobInfo) Task
+ResumeAsync(JobInfo) Task
+ShutdownAsync() Task
+StartAsync() Task
+StopAsync() Task
+TriggerAsync(JobInfo) Task
}
class IJobScheduler {
<<interface>>
+PublishAsync(JobInfo) Task
+QueueAsync(JobInfo) Task
+QueuesAsync(IEnumerable~JobInfo~) Task
+RemoveAsync(JobInfo) Task
+ExistsAsync(JobInfo) Task
+PauseAsync(JobInfo) Task
+ResumeAsync(JobInfo) Task
+TriggerAsync(JobInfo) Task
+StartAsync() Task
+StopAsync() Task
+ShutdownAsync() Task
}
QuartzJobScheduler --|> IJobScheduler
QuartzJobScheduler --> IJobStore
QuartzJobScheduler --> IScheduler
QuartzJobScheduler --> IQuartzKeyBuilder
QuartzJobScheduler --> IQuartzJobCreator
图示来源
- QuartzJobScheduler.cs
本节来源
- QuartzJobScheduler.cs
作业监听器分析
QuartzJobListener和QuartzTriggerListener分别监听作业执行和触发器事件,实现作业执行前后的业务逻辑处理。
sequenceDiagram
participant Scheduler as 调度器
participant TriggerListener as 触发器监听器
participant JobListener as 作业监听器
participant Job as 作业
Scheduler->>TriggerListener : VetoJobExecution()
alt 作业被锁定
TriggerListener-->>Scheduler : 返回true(阻止执行)
else 可以执行
TriggerListener-->>Scheduler : 返回false
Scheduler->>JobListener : JobToBeExecuted()
JobListener->>JobEventTrigger : 触发执行前事件
JobEventTrigger-->>JobListener : 完成
JobListener-->>Scheduler : 完成
Scheduler->>Job : 执行作业
Job-->>Scheduler : 完成
Scheduler->>JobListener : JobWasExecuted()
JobListener->>JobEventTrigger : 触发执行后事件
JobEventTrigger-->>JobListener : 完成
JobListener-->>Scheduler : 完成
Scheduler->>TriggerListener : TriggerComplete()
TriggerListener-->>Scheduler : 完成
end
图示来源
- QuartzJobListener.cs
- QuartzTriggerListener.cs
本节来源
- QuartzJobListener.cs
- QuartzTriggerListener.cs
数据库初始化分析
系统通过IQuartzSqlInstaller接口实现数据库初始化,支持MySQL和SQL Server两种数据库。
flowchart TD
Start([开始]) --> CheckConfig["检查Quartz配置"]
CheckConfig --> ConfigValid{"配置有效?"}
ConfigValid --> |否| ReturnError["记录错误并返回"]
ConfigValid --> |是| CreateDB["创建数据库(如果不存在)"]
CreateDB --> CheckTables["检查表是否存在"]
CheckTables --> TablesExist{"表已存在?"}
TablesExist --> |是| ReturnSuccess["返回成功"]
TablesExist --> |否| ReadScript["读取Initial.sql脚本"]
ReadScript --> ReplaceVars["替换变量(${DataBase}, ${TablePrefix})"]
ReplaceVars --> ExecuteScript["执行SQL脚本"]
ExecuteScript --> ReturnSuccess
ReturnSuccess --> End([结束])
图示来源
- MySqlQuartzSqlInstaller.cs
- SqlServerQuartzSqlInstaller.cs
本节来源
- MySqlQuartzSqlInstaller.cs
- SqlServerQuartzSqlInstaller.cs
依赖分析
系统依赖关系清晰,各组件职责分明。核心依赖包括Quartz.NET库、ABP框架、数据库驱动和虚拟文件系统。
graph TD
A[QuartzJobScheduler] --> B[Quartz