跳到主要内容
版本:3.0.0

Postgres 任务存储扩展(Aegis.Jobs.Postgres)

Aegis.Jobs.PostgresAegis.Jobs 的 PostgreSQL 持久化扩展。它负责把任务数据写入数据库,并补上任务存储、任务恢复和多节点运行所需的持久化底座。

组件概览

字段说明
组件名称Postgres 任务存储扩展
真实类库Aegis.Jobs.Postgres
组件定位Aegis.Jobs 的 PostgreSQL 持久化扩展
引入方式安装 NuGet,并在 Component.deps.jsonServices 中启用 Jobs.Postgres
组件声明Jobs.Postgres
核心能力任务持久化、任务状态留存、任务存储注册、AegisJobDb 数据源
典型配套Aegis.JobsAegis.Core.FreeSql

什么时候要用它

适合场景:

  • 正式环境需要任务持久化
  • 服务重启后任务需要恢复
  • 多实例部署需要共享任务存储

最小可运行路径

第一步:在组件配置里同时启用 JobsJobs.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

配套阅读