SuperAPI AI 工具集

workflow

部署与运维

查看项目

更新于 10-24 17:41

技能介绍

该技能介绍如何使用 Convex 的持久化多步工作流组件 @convex-dev/workflow。当任务需要“先做 A,再做 B,再做 C,且每一步失败后可独立重试”,并且流水线、ETL 或编排过程必须能在崩溃后继续运行,应使用该组件,而不应使用 jobs 表加 ctx.scheduler.runAfter 链自行实现。

主要能力:每个 step.run* 调用都是一个持久化检查点。发生崩溃或重试时,已完成的步骤会从其存储结果重放,而不会重新执行,因此某个步骤失败并重试成功后,之前的步骤不会重跑。组件支持为所有步骤设置默认重试策略,包括最大尝试次数、初始退避和基数;也支持对单个步骤覆盖重试参数,或对不能重复执行的步骤设置 retry: false。

使用方式:先在 convex/convex.config.ts 中通过 defineApp 和 app.use(workflow) 接入组件。然后使用 WorkflowManager 创建 workflow,并通过 workflow.define 定义流程;其 handler 第一个参数是 step,而不是 ctx。流程中应调用 step.runAction、step.runMutation 或 step.runQuery,并传入代码生成的 internal.* 引用,不要在工作流处理器内使用 ctx.run*。实际工作放在普通的 internalActions 中,外部 API 调用放在 action 中,邮件可经由 @convex-dev/resend。启动时,从客户端调用的公共 mutation 或 action 中调用 workflow.start;之后可用 workflow.status 查询状态,用 workflow.cleanup 清理。

资料还列出了禁止做法:不要用自定义 jobs/pipeline 表加 ctx.scheduler.runAfter 链来伪造重试与顺序;不要在工作流处理器内使用 ctx.runAction;不要为避免拆分步骤而在单个 action 中执行长时间同步工作,因为这样会失去独立重试能力,而且每个步骤仍受 10 分钟 action 上限约束。