Temporal 一般有四种超时:
- Schedule-To-Close:限制最大执行时间,包括重试。
- Start-To-Close:限制单个活动执行的最大执行时间。
- Heatbeat:限制心跳间隔的最大时间。对于长时间运行的活动,当 Heartbeat 记录失败时,可以更快地响应。
- Schedule-To-Start:限制活动任务在任务队列中的最长时间。主要用于识别Worker是否关闭或用于任务路由。
Activity 的生命周期
Step 1 - Workflow Worker
活动 SimpleActivity 首先在任务队列 sampleTaskQueue 的 Workflow Worker 中调用,超时也作为Activity选项的一部分预先指定:
|
在幕后,SDK 将其转换为 ScheduleActivity 命令,该命令被发送到 Temporal 服务器。该命令包含各种元数据,包括活动类型 (SimpleActivity)、活动任务队列 (sampleTaskQueue)和活动 ID。如果没有指定 RetryPolicy,Temporal 将使用默认的重试策略。
重试策略
Step 2 - Temporal Server
接收到命令后, Temporal 服务器将一个活动任务添加到 sampleTaskQueue 活动任务队列。
此时活动处于 Scheduled 状态
Step 3 - Activity Worker
一个已经轮询 sampleTaskQueue Activity TaskQueue 的 Activity Worker 拿起 Activity Task 并开始执行。
此时活动处于 Started 状态
Step 4 - Temporal Server
一旦 Activity 执行成功完成,Activity Worker发送一个 CompleteActivityTask 消息(连同 Activity 执行的结果)给 Temporal Server,然后把控制权还给 Workflow Worker 继续执行下一行代码并重复上述过程。
此时活动处于 Closed 状态
Start-To-Close Timeout
处理任务所需的最长时间(建议始终设置此超时)
Schedule-To-Start Timeout
任务等待调度的时间,指定时间任务没被处理则超时(不建议),监控使用
Schedule-To-Close Timeout
任务完成所需要的时间(包括所有重试)
通常大于 StartClose 和 ScheduleToStart 超时的总和(RetryPolicy.MaximumAttempts>1 时启用),建议使用Schedule-To-Close Timeout来限制重试次数,而不是调整最大尝试次数
Heartbeat Timeout:心跳探活时间
用于检测两个活动任务间的最长时间,能够更快的重试活动。对于长时间运行的活动,建议指定一个相对较短的心跳超时和持续的心跳