Postgres 任务存储扩展(Aegis.Jobs.Postgres)
Aegis.Jobs.Postgres 是 Aegis.Jobs 的 PostgreSQL 持久化扩展。它负责把任务数据写入数据库,并补上任务存储、任务恢复和多节点运行所需的持久化底座。
组件概览
| 字段 | 说明 |
|---|---|
| 组件名称 | Postgres 任务存储扩展 |
| 真实类库 | Aegis.Jobs.Postgres |
| 组件定位 | Aegis.Jobs 的 PostgreSQL 持久化扩展 |
| 引入方式 | 安装 NuGet,并在 Component.deps.json 的 Services 中启用 Jobs.Postgres |
| 组件声明 | Jobs.Postgres |
| 核心能力 | 任务持久化、任务状态留存、任务存储注册、AegisJobDb 数据源 |
| 典型配套 | Aegis.Jobs、Aegis.Core.FreeSql |
什么时候要用它
适合场景:
- 正式环境需要任务持久化
- 服务重启后任务需要恢复
- 多实例部署需要共享任务存储
最小可运行路径
第一步:在组件配置里同时启用 Jobs 和 Jobs.Postgres
{
"Components": {
"Services": [
"Jobs",
"Jobs.Postgres"
],
"Middlewares": []
}
}
这里建议保持 Jobs 在前,Jobs.Postgres 在后。
第二步:准备配置
{
"ServerSettings": {
"ServerId": "1"
},
"PostgreConnection": "Host=127.0.0.1;Database=aegis_jobs;Port=5432;Username=postgres;Password=postgres"
}
第三步:像普通任务一样调度
var jobId = AegisJob.Schedule<TestJob>(
x => x.Test(2),
TimeSpan.FromSeconds(1));
接入 Jobs.Postgres 后,调度代码本身不需要改,变化主要发生在任务存储层。
它比基础版多做了什么
启用后,当前扩展会补上这几类能力:
- 注册任务持久化连接
- 注册
JobStorage - 注册任务数据库源
AegisJobDb - 让任务状态写入 PostgreSQL
这也是为什么它更适合作为正式环境的默认方案。
常见状态怎么理解
| 状态 | 含义 |
|---|---|
Scheduled | 已写入数据库,等待到达执行时间 |
Queued | 已进入待执行队列 |
Processing | 正在执行 |
Succeeded | 执行成功 |
Failed | 执行失败 |
Canceled | 已取消 |
Aborted | 执行过程中中断 |
接入后怎么确认已经生效
可以这样确认:
- 应用启动时没有
Jobs.Postgres初始化异常 - 调度任务后能返回任务编号
- PostgreSQL 中可以看到任务数据和状态数据
- 服务重启后,未完成任务仍然可以继续调度
常见问题
只启用 Jobs.Postgres 可以吗
不可以。
它是存储扩展,前面还需要先启用 Jobs。
Jobs.Postgres 放在 Jobs 前面会怎么样
不建议这样配。
保持 Jobs 在前、Jobs.Postgres 在后,初始化链路更稳定。
多实例部署时最容易漏什么
最容易漏的是 ServerSettings:ServerId。
每台实例都应该配置唯一的 ServerId。