基本介绍
运行期任务能力提供定时任务视图读取、执行触发和状态管理:
| 入口 | 使用者 | 说明 |
|---|---|---|
services.Jobs() | 源码插件 | 读取可见任务视图、触发任务执行、修改任务状态 |
jobs.* | 动态插件 | 读取可见任务视图、校验任务可见性 |
声明期的任务注册能力请参阅任务声明。
能力阶段:运行期
类型支持:源码插件、动态插件
能力设计
任务视图模型
Jobs()返回任务视图,用于读取已纳入宿主管理的任务状态:
| 字段 | 说明 |
|---|---|
ID | 任务标识 |
Name | 任务展示名称 |
Group | 任务分组 |
Status | 任务生命周期状态 |
接口定义
源码插件接口
源码插件通过services.Jobs()访问任务视图和执行管理:
| 方法 | 说明 |
|---|---|
Get | 读取单个可见任务视图 |
BatchGet | 批量读取可见任务视图 |
List | 按关键词、分组和状态搜索可见任务候选 |
EnsureVisible | 校验目标任务集合对当前调用上下文可见 |
Create | 创建定时任务,经过任务组、Cron表达式和租户边界校验 |
Update | 更新可见定时任务,经过目标可见性和租户边界校验 |
Delete | 删除可见定时任务,经过目标可见性和租户边界校验 |
Run | 触发一个可见任务执行,经过状态、目标、租户和审计校验 |
SetStatus | 改变一个可见任务状态,经过状态机、目标和调度器注册校验 |
动态插件接口
动态插件只能读取任务视图,不支持创建、更新、删除、触发或修改状态等写操作:
| 动态方法 | 说明 |
|---|---|
jobs.batch_get | 批量读取可见定时任务视图 |
jobs.list | 按关键词、分组和状态搜索可见任务候选 |
jobs.visible.ensure | 校验目标任务集合对当前调用上下文可见 |
能力使用
源码插件使用
源码插件通过services.Jobs()访问任务视图和执行管理:
// 批量读取任务视图
result, err := services.Jobs().BatchGet(ctx, jobIDs)
// 搜索可见任务候选
page, err := services.Jobs().List(ctx, jobcap.ListInput{
Keyword: "report",
Group: "daily",
Page: pageRequest,
})
// 校验任务可见性
err := services.Jobs().EnsureVisible(ctx, jobIDs)
// 触发任务执行(经过状态、目标、租户、审计和调度器校验)
err := services.Jobs().Run(ctx, jobID)
// 修改任务状态(经过状态机、目标和调度器注册校验)
err := services.Jobs().SetStatus(ctx, jobID, jobv1.StatusDisabled)
动态插件使用
动态插件在plugin.yaml中声明jobs服务:
hostServices:
- service: jobs
methods:
- jobs.batch_get
- jobs.list
- jobs.visible.ensure
jobs是none资源类型,不声明资源字段。动态插件在运行期通过宿主服务读取任务视图:
// 批量读取任务视图
result, err := hostServices.Jobs().BatchGet(ctx, jobIDs)
// 搜索可见任务候选
page, err := hostServices.Jobs().List(ctx, &ListInput{
Keyword: "report",
Group: "daily",
})
// 校验任务可见性
err := hostServices.Jobs().EnsureVisible(ctx, jobIDs)
声明期的任务注册请参阅任务声明。
设计约束
- 执行经过治理校验。
Run和SetStatus通过services.Jobs()暴露给源码插件,经过状态、目标、租户、审计和调度器注册校验后执行。动态插件不支持这两个操作。 - 动态插件只读。 动态插件只能读取任务视图和校验可见性,不支持创建、更新、删除、触发或修改状态等写操作。
- 任务表不暴露给插件。 插件不能通过任务能力读取宿主任务日志、调度器内部状态或数据库表结构。
- 任务状态由宿主定义。 插件不应写入宿主状态机不接受的状态值。