这是基于vue-vben-admin 模板适用于abp Vnext的前端管理项目
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.
 
 
 
 
 
 

9.6 KiB

任务管理模块

**本文档引用的文件** - [AbpBackgroundTasksModule.cs](file://aspnet-core/modules/task-management/LINGYUN.Abp.BackgroundTasks/LINGYUN/Abp/BackgroundTasks/AbpBackgroundTasksModule.cs) - [IJobScheduler.cs](file://aspnet-core/modules/task-management/LINGYUN.Abp.BackgroundTasks/LINGYUN/Abp/BackgroundTasks/IJobScheduler.cs) - [BackgroundJobManager.cs](file://aspnet-core/modules/task-management/LINGYUN.Abp.BackgroundTasks/LINGYUN/Abp/BackgroundTasks/BackgroundJobManager.cs) - [JobInfo.cs](file://aspnet-core/modules/task-management/LINGYUN.Abp.BackgroundTasks.Abstractions/LINGYUN/Abp/BackgroundTasks/JobInfo.cs) - [QuartzJobScheduler.cs](file://aspnet-core/modules/task-management/LINGYUN.Abp.BackgroundTasks.Quartz/LINGYUN/Abp/BackgroundTasks/Quartz/QuartzJobScheduler.cs) - [IQuartzJobCreator.cs](file://aspnet-core/modules/task-management/LINGYUN.Abp.BackgroundTasks.Quartz/LINGYUN/Abp/BackgroundTasks/Quartz/IQuartzJobCreator.cs) - [BackgroundJobInfoAppService.cs](file://aspnet-core/modules/task-management/LINGYUN.Abp.TaskManagement.Application/LINGYUN/Abp/TaskManagement/BackgroundJobInfoAppService.cs) - [BackgroundJobSynchronizer.cs](file://aspnet-core/modules/task-management/LINGYUN.Abp.TaskManagement.Domain/LINGYUN/Abp/TaskManagement/BackgroundJobSynchronizer.cs) - [BackgroundJobManager.cs](file://aspnet-core/modules/task-management/LINGYUN.Abp.TaskManagement.Domain/LINGYUN/Abp/TaskManagement/BackgroundJobManager.cs) - [TaskManagementJobPublisher.cs](file://aspnet-core/modules/task-management/LINGYUN.Abp.BackgroundTasks.TaskManagement/LINGYUN/Abp/BackgroundTasks/TaskManagement/TaskManagementJobPublisher.cs) - [BackgroundJobEto.cs](file://aspnet-core/modules/task-management/LINGYUN.Abp.TaskManagement.Domain.Shared/LINGYUN/Abp/TaskManagement/BackgroundJobEto.cs)

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构概述
  5. 详细组件分析
  6. 依赖分析
  7. 性能考虑
  8. 故障排除指南
  9. 结论

简介

任务管理模块是ABP框架中的一个关键组件,负责后台任务和定时作业的管理。该模块提供了任务的创建、调度、执行监控和日志记录功能。它集成了Quartz调度框架,支持任务的分布式执行和锁机制。模块采用分层架构,定义了多种任务类型,并实现了失败重试策略。此外,它还与事件总线集成,提供了API接口和管理界面功能,使开发者能够轻松地定义、注册和管理后台任务。

项目结构

任务管理模块位于aspnet-core/modules/task-management目录下,采用模块化设计,包含多个子模块,每个子模块负责不同的功能。主要子模块包括:

  • LINGYUN.Abp.BackgroundTasks:核心任务管理功能
  • LINGYUN.Abp.BackgroundTasks.Abstractions:任务管理抽象定义
  • LINGYUN.Abp.BackgroundTasks.Quartz:Quartz调度框架集成
  • LINGYUN.Abp.TaskManagement.Application:应用服务层
  • LINGYUN.Abp.TaskManagement.Domain:领域逻辑层
  • LINGYUN.Abp.TaskManagement.EntityFrameworkCore:数据访问层
graph TD
subgraph "任务管理模块"
A[LINGYUN.Abp.BackgroundTasks] --> B[核心功能]
C[LINGYUN.Abp.BackgroundTasks.Abstractions] --> D[抽象定义]
E[LINGYUN.Abp.BackgroundTasks.Quartz] --> F[Quartz集成]
G[LINGYUN.Abp.TaskManagement.Application] --> H[应用服务]
I[LINGYUN.Abp.TaskManagement.Domain] --> J[领域逻辑]
K[LINGYUN.Abp.TaskManagement.EntityFrameworkCore] --> L[数据访问]
end

图示来源

  • AbpBackgroundTasksModule.cs

本节来源

  • AbpBackgroundTasksModule.cs

核心组件

任务管理模块的核心组件包括任务调度器、任务存储、任务发布器和任务执行器。这些组件协同工作,实现了任务的全生命周期管理。

本节来源

  • IJobScheduler.cs
  • BackgroundJobManager.cs
  • JobInfo.cs

架构概述

任务管理模块采用分层架构,从上到下分为应用层、领域层、基础设施层和数据访问层。各层之间通过接口进行通信,实现了高内聚低耦合的设计原则。

graph TD
A[应用层] --> B[领域层]
B --> C[基础设施层]
C --> D[数据访问层]
D --> E[数据库]
F[Quartz调度器] --> C
G[事件总线] --> A
H[API接口] --> A
I[管理界面] --> H

图示来源

  • AbpBackgroundTasksModule.cs
  • BackgroundJobInfoAppService.cs

详细组件分析

任务调度器分析

任务调度器是任务管理模块的核心组件,负责任务的调度和执行。它实现了IJobScheduler接口,提供了任务入队、触发、暂停、恢复和移除等操作。

classDiagram
class IJobScheduler {
<<interface>>
+QueueAsync(JobInfo job) bool
+QueuesAsync(IEnumerable~JobInfo~ jobs) void
+ExistsAsync(JobInfo job) bool
+TriggerAsync(JobInfo job) void
+PauseAsync(JobInfo job) void
+ResumeAsync(JobInfo job) void
+RemoveAsync(JobInfo job) bool
+StartAsync() bool
+StopAsync() bool
+ShutdownAsync() bool
}
class QuartzJobScheduler {
-IJobStore JobStore
-IScheduler Scheduler
-IQuartzKeyBuilder KeyBuilder
-IQuartzJobCreator QuartzJobCreator
+ExistsAsync(JobInfo job) bool
+PauseAsync(JobInfo job) void
+PublishAsync(JobInfo job) bool
+QueueAsync(JobInfo job) bool
+QueuesAsync(IEnumerable~JobInfo~ jobs) void
+RemoveAsync(JobInfo job) bool
+ResumeAsync(JobInfo job) void
+ShutdownAsync() bool
+StartAsync() bool
+StopAsync() bool
+TriggerAsync(JobInfo job) void
}
class NullJobScheduler {
+Instance IJobScheduler
+ExistsAsync(JobInfo job) bool
+PauseAsync(JobInfo job) void
+QueueAsync(JobInfo job) bool
+QueuesAsync(IEnumerable~JobInfo~ jobs) void
+RemoveAsync(JobInfo job) bool
+ResumeAsync(JobInfo job) void
+ShutdownAsync() bool
+StartAsync() bool
+StopAsync() bool
}
IJobScheduler <|-- QuartzJobScheduler
IJobScheduler <|-- NullJobScheduler

图示来源

  • IJobScheduler.cs
  • QuartzJobScheduler.cs
  • NullJobScheduler.cs

本节来源

  • IJobScheduler.cs
  • QuartzJobScheduler.cs

任务信息分析

JobInfo类是任务的核心数据结构,包含了任务的所有元数据和状态信息。它定义了任务的标识、名称、分组、类型、参数、状态、优先级、执行时间等属性。

classDiagram
class JobInfo {
+string Id
+Guid? TenantId
+string Name
+string Group
+string Type
+string Result
+JobSource Source
+IDictionary~string, object~ Args
+JobStatus Status
+string Description
+DateTime CreationTime
+DateTime BeginTime
+DateTime? EndTime
+DateTime? LastRunTime
+DateTime? NextRunTime
+JobType JobType
+string Cron
+int TriggerCount
+int TryCount
+int MaxTryCount
+int MaxCount
+bool IsAbandoned
+int Interval
+JobPriority Priority
+int LockTimeOut
+string NodeName
+CalcCanBeTriggered() int
}
class JobSource {
<<enumeration>>
+None
+System
}
class JobStatus {
<<enumeration>>
+None
+Waiting
+Running
+Succeeded
+Failed
+FailedRetry
+Paused
+Stopped
+Abandoned
}
class JobType {
<<enumeration>>
+Once
+Persistent
+Period
}
class JobPriority {
<<enumeration>>
+Low
+BelowNormal
+Normal
+AboveNormal
+High
}

图示来源

  • JobInfo.cs

本节来源

  • JobInfo.cs

应用服务分析

BackgroundJobInfoAppService是任务管理模块的应用服务,提供了RESTful API接口,用于管理后台任务。它实现了IBackgroundJobInfoAppService接口,提供了任务的创建、读取、更新、删除和批量操作功能。

sequenceDiagram
    participant Client as "客户端"
    participant AppService as "BackgroundJobInfoAppService"
    participant DomainService as "BackgroundJobManager"
    participant Repository as "BackgroundJobInfoRepository"
    participant Scheduler as "QuartzJobScheduler"
    
    Client->>AppService: CreateAsync(input)
    AppService->>Repository: CheckNameAsync()
    Repository-->>AppService: bool
    AppService->>DomainService: CreateAsync()
    DomainService->>Repository