Skip to content
bitzorcas
EN

Concept

后台任务

后台任务调度 — Quartz.NET 在独立 JobHost 进程中运行,支持基于 Cron 的调度、租户上下文注入和审计保留清理。

Last updated

BitzOrcas 使用 Quartz.NET 在独立 JobHost 进程中运行后台任务。这保持 API 宿主的裁剪安全和 AOT 兼容性。

架构

┌──────────────────┐ ┌──────────────────┐
│ API 宿主 │ │ JobHost │
│ (AOT, 已裁剪) │ │ (未裁剪) │
│ │ │ │
│ 无 Quartz │ │ Quartz.NET │
│ 无 CAP 消费者 │ │ SqlSugar 审计 │
└────────┬─────────┘ └────────┬─────────┘
│ │
└────────────┬───────────┘
SQL Server
(共享数据库)

已注册任务

任务触发器用途
AuditRetentionQuartzJobCron(可配置)按保留策略清理旧审计记录

Quartz 配置

{
"Audit": {
"Retention": {
"Enabled": true,
"CronExpression": "0 0 2 * * ?",
"MaxAgeDays": 90
}
}
}

JobHost 组成

JobHost 是最小化的——仅包含调度工作所需:

Host.CreateApplicationBuilder(args)
// 时钟 + 审计管道
.AddBitzOrcasAuditDefaults()
.AddBitzOrcasAuditPipeline()
// SqlSugar(如果配置了连接)
.AddBitzOrcasSqlSugar()
.AddBitzOrcasSqlSugarAuditStore()
// Quartz 调度
.AddQuartz(configure)
.AddQuartzHostedService()
// OTel + 健康检查
.AddServiceDefaults()

任务的租户上下文

后台任务没有 HTTP 上下文。对于租户范围操作:

await currentUserAccessor.BeginScopeAsync(userId, tenantId, async () =>
{
// 此代码以指定用户/租户身份运行
});

添加新任务

  1. BitzOrcas.JobHost/ 中创建实现 IJob 的类
  2. Program.cs 中注册:
q.AddJob<MyNewJob>(opts => opts.WithIdentity("my-job"));
q.AddTrigger(opts => opts
.ForJob("my-job")
.WithCronSchedule("0 0 */6 * * ?")); // 每 6 小时

另见