Jobs 概述
许多应用程序需要作业调度,或者需要在将来执行某个操作。Jobs API 是一个编排器,用于调度这些未来的作业,可以在特定时间或特定间隔执行。
Jobs API 不仅帮助你调度作业,而且在内部,Dapr 使用 Scheduler 服务来调度 actor reminders。
Dapr 中的 Jobs 由以下部分组成:

工作原理
Jobs API 是一个作业调度器,而不是运行作业的执行器。该设计保证至少一次作业执行,优先考虑持久化和水平扩展而非精确性。这意味着:
- 保证: 作业永远不会在计划时间之前被调用。
- 不保证: 在到期时间之后调用作业的时间上限。
所有计划作业的作业详细信息和用户关联数据都存储在 Scheduler 服务中的嵌入式 Etcd 数据库中。
你可以使用 jobs 来:
场景
作业调度在以下场景中可能很有用:
自动化数据库备份: 确保数据库每天备份以防止数据丢失。安排备份脚本每天凌晨 2 点运行,这将创建数据库备份并将其存储在安全位置。
定期数据处理和 ETL(提取、转换、加载): 处理和转换来自各种来源的原始数据并将其加载到数据仓库中。安排 ETL 作业在特定时间运行(例如:每小时、每天)以获取新数据、处理它,并用最新信息更新数据仓库。
电子邮件通知和报告: 通过电子邮件接收每日销售报告和每周绩效摘要。安排一个作业生成所需的报告,并通过电子邮件发送,每天报告在每天早上 6 点发送,每周摘要在每周一早上 8 点发送。
维护任务和系统更新: 执行定期维护任务,如清除临时文件、更新软件和检查系统运行状况。安排各种维护脚本在非高峰时段运行,例如周末或深夜,以最大程度减少对用户的干扰。
金融交易的批处理: 处理大量需要批处理并在每个工作日结束时进行结算的交易。安排批处理作业在每个工作日下午 5 点运行,汇总当天的交易并执行必要的结算和对账。
Dapr 的 jobs API 确保这些场景中代表的任务始终如一且可靠地执行,无需手动干预,从而提高效率并降低错误风险。
功能
Jobs API 的主要功能允许你创建、检索和删除计划作业。默认情况下,当你创建一个名称已存在的作业时,操作会失败,除非你显式地将 overwrite 标志设置为 true。这确保现有作业不会被意外修改或覆盖。
跨多个副本调度作业
当你创建一个作业时,它不会替换同名的现有作业,除非你显式设置 overwrite 标志。这意味着每次创建作业时,它都会重置计数,并且只在该作业的嵌入式 etcd 中保留 1 条记录。因此,你不必担心创建和触发多个作业——只有最新的作业被记录和执行,即使你的所有应用程序在启动时都调度相同的作业。
Scheduler 服务使作业的调度能够跨多个副本扩展,同时保证作业仅由 1 个 Scheduler 服务实例触发。
试用 jobs API
你可以在你的应用程序中试用 jobs API。在安装 Dapr后,你就可以开始使用 jobs API,从操作指南:调度作业指南开始。