用途
Cloudflare Workflows 用于持久化的长时运行执行,适合多步骤工作流、重试、状态持久化等场景。本技能(cloudflare-workflows)为在 Cloudflare Workers 上开发 Workflows 提供指导,面向需要构建多步骤编排、可靠执行与状态保持的应用。依赖 cloudflare-worker-base(用于 Worker 设置)。
主要能力
- 持久化执行:工作流步骤结果自动持久化,已完成的步骤即使崩溃或重启也不会重新运行,状态在整个工作流生命周期内可用。
- 自动重试:step.do() 支持自动重试;可通过抛出 NonRetryableError 停止对永久性失败的重试。
- 步骤方法:提供 step.do(执行工作并自动重试)、step.sleep(按持续时间等待)、step.sleepUntil(等待至指定时间戳)、step.waitForEvent(等待外部事件)。
- 事件系统:支持 waitForEvent 等待外部事件,需设置超时并处理。
- 触发方式:可从 Worker 通过 env.MY_WORKFLOW.create() 创建实例,用 instance.status() 获取状态,用 instance.trigger() 触发事件;也可从 Cron 的 scheduled() 处理程序按计划创建实例。
- 配套工具:提供交互式斜杠命令(/workflow-setup、/workflow-create、/workflow-debug、/workflow-test)、自主代理(workflow-debugger、workflow-optimizer、workflow-setup-assistant)以及自动化脚本(配置校验、测试、基准测试、脚手架生成、限制检查)。
使用方式
快速上手:使用 Cloudflare Workflows 起始模板创建项目:
npm create cloudflare@latest my-workflow -- --template cloudflare/workflows-starter --git --deploy false
cd my-workflow
基础工作流结构(src/index.ts)继承 WorkflowEntrypoint 并实现 run 方法,所有工作必须在步骤中完成以保证持久性。配置 wrangler.jsonc 中的 workflows 绑定,然后执行 npm run deploy 部署。
关键规则:所有 I/O(fetch、KV、D1、R2)必须放在 step.do() 回调内;使用命名步骤便于调试;步骤返回的数据必须可 JSON 序列化;延迟使用 step.sleep() 而非 setTimeout();对永久性失败使用 NonRetryableError。
适用场景
顺序工作流(订单处理、用户引导、数据管道)、计划工作流(提醒序列、计划任务、延迟通知)、事件驱动工作流(等待外部事件)、带重试的工作流等。
限制
- 步骤 CPU 时间:30 秒
- 工作流持续时间:30 天
- 步骤负载大小:128 KB
- 工作流负载大小:128 KB
- 每工作流步骤数:1,000
- 并发实例:每工作流 1,000
- 事件负载大小:128 KB
应对方式:大数据存入 KV/R2 并传 key;长 CPU 计算拆分为更小步骤;步骤过多可考虑子工作流。
常见错误
I/O 上下文错误(在 step.do() 外执行 I/O)、序列化错误(返回不可 JSON 序列化数据)、未抛 NonRetryableError(永久失败一直重试)、WorkflowEvent 未找到(事件名不匹配)、步骤超时(超过最大 CPU 时间)。
定价
持续时间:每百万 GB-s 0.02 美元(与 Workers 相同);请求:每百万 0.15 美元(工作流创建 + 步骤执行);状态存储:包含在内;sleep:免费。
官方文档
Workflows:https://developers.cloudflare.com/workflows/ ;API Reference:https://developers.cloudflare.com/workflows/reference/ ;Examples:https://developers.cloudflare.com/workflows/examples/ ;Blog:https://blog.cloudflare.com/cloudflare-workflows/