工作流与活动
工作流负责编排,活动负责执行副作用。把两者边界划清,是 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、消息队列、第三方服务。
失败恢复
通过活动超时 + 重试策略控制失败恢复,避免把重试逻辑散落在业务代码。