SuperAPI AI 工具集

cloudflare-workflows

部署与运维

查看项目

更新于 10-15 12:44

技能介绍

用途

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/