工作流与活动

工作流负责编排,活动负责执行副作用。把两者边界划清,是 Temporal 应用可维护的关键。

编排示例(Go)

func OrderWorkflow(ctx workflow.Context, orderID string) error {
    ao := workflow.ActivityOptions{
        StartToCloseTimeout: 30 * time.Second,
        RetryPolicy: &temporal.RetryPolicy{
            InitialInterval: time.Second,
            MaximumAttempts: 5,
        },
    }
    ctx = workflow.WithActivityOptions(ctx, ao)

    if err := workflow.ExecuteActivity(ctx, ValidateOrderActivity, orderID).Get(ctx, nil); err != nil {
        return err
    }

    var paymentID string
    if err := workflow.ExecuteActivity(ctx, ChargePaymentActivity, orderID).Get(ctx, &paymentID); err != nil {
        return err
    }

    return workflow.ExecuteActivity(ctx, CreateShipmentActivity, orderID, paymentID).Get(ctx, nil)
}
Workflow
只保留确定性逻辑:编排步骤、分支、补偿、重放安全代码。
Activity
执行外部调用和副作用:数据库、HTTP、消息队列、第三方服务。
失败恢复
通过活动超时 + 重试策略控制失败恢复,避免把重试逻辑散落在业务代码。

官方参考