Temporal 工作流超时篇

文章详细介绍了Temporal中的四种超时机制:Schedule-To-Close、Start-To-Close、Heartbeat和Schedule-To-Start,以及Activity的生命周期过程,包括从WorkflowWorker到ActivityWorker的处理步骤和重试策略。强调了正确设置这些超时对长时间运行活动的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Temporal 一般有四种超时:

  • Schedule-To-Close:限制最大执行时间,包括重试。
  • Start-To-Close:限制单个活动执行的最大执行时间。
  • Heatbeat:限制心跳间隔的最大时间。对于长时间运行的活动,当 Heartbeat 记录失败时,可以更快地响应。
  • Schedule-To-Start:限制活动任务在任务队列中的最长时间。主要用于识别Worker是否关闭或用于任务路由。

Activity 的生命周期

Step 1 - Workflow Worker

活动 SimpleActivity 首先在任务队列 sampleTaskQueue 的 Workflow Worker 中调用,超时也作为Activity选项的一部分预先指定:

ao := workflow.ActivityOptions{

    TaskQueue:              "sampleTaskQueue",

    ScheduleToCloseTimeout: time.Second * 500,

    // ScheduleToStartTimeout: time.Second * 60// usually not needed! see below

    StartToCloseTimeout: time.Second * 60,

    HeartbeatTimeout:    time.Second * 10,

    WaitForCancellation: false,

    RetryPolicy: &temporal.RetryPolicy{

        InitialInterval: time.Second * 20,

        MaximumAttempts: 3,

        MaximumInterval: time.Second * 100,

    },

}

ctx = workflow.WithActivityOptions(ctx, ao)

     

var result string

err := workflow.ExecuteActivity(ctx, SimpleActivity, value).Get(ctx, &result)

if err != nil {

    return err

}

在幕后,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

处理任务所需的最长时间(建议始终设置此超时)

122290108-fff64000-cf25-11eb-92b3-0533e41c3fee

Schedule-To-Start Timeout

任务等待调度的时间,指定时间任务没被处理则超时(不建议),监控使用

122290279-287e3a00-cf26-11eb-8dd6-3133016a0bd9

Schedule-To-Close Timeout

任务完成所需要的时间(包括所有重试)

通常大于 StartClose 和 ScheduleToStart 超时的总和(RetryPolicy.MaximumAttempts>1 时启用),建议使用Schedule-To-Close Timeout来限制重试次数,而不是调整最大尝试次数

122290183-0dabc580-cf26-11eb-913d-3dc74d5eb55f

Heartbeat Timeout:心跳探活时间

用于检测两个活动任务间的最长时间,能够更快的重试活动。对于长时间运行的活动,建议指定一个相对较短的心跳超时和持续的心跳

122424268-287f4800-cfc1-11eb-8417-f52743347afc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值