Temporal 是开源持久化工作流编排平台,用于构建长时间运行、容错的流程。它会自动持久化执行状态,并在失败后重放,使工作流从中断处继续,无需手动检查点。
主要能力:Durable Workflows(工作流代码在沙箱隔离中运行,状态以 Event History 持久化,Worker 崩溃后可恢复);Activities(承载 API 调用、数据库写入、文件 I/O 等副作用,可配置重试策略与超时,失败自动重试而无需重跑整个工作流);Workers(轮询任务队列并执行工作流与活动代码,可通过增加实例水平扩展);Task Queues(命名路由通道,工作流派发到指定队列,只有轮询该队列的 Worker 会取走);Signals(单向消息,向运行中的工作流推送外部数据,发后不理);Queries(同步读取工作流内存状态,不修改状态,立即返回);Updates(双向,调用方发送数据并等待工作流校验后的响应,比 Signals 新,需要回复时优先用 Updates);Schedules(替代 cron,提供可靠、可观测、可回填的周期性工作流);Temporal Cloud(全托管服务,含 mTLS 认证、命名空间、指标,改连接地址并提供 TLS 凭据即可切换)。
TypeScript SDK 包:@temporalio/client 启动工作流、发送信号/更新、查询状态;@temporalio/worker 运行 Worker;@temporalio/workflow 定义工作流函数;@temporalio/activity 定义活动函数。典型布局为 src/ 下 workflows.ts、activities.ts、worker.ts、client.ts。
使用方式:先用 WebFetch 读取 https://docs.temporal.io/llms.txt 获取最新文档,不要假设 API 存在。工作流代码必须确定性,禁止在 workflow 函数内使用 Math.random()、Date.now()、new Date()、setTimeout、setInterval 或直接 I/O,改用 @temporalio/workflow 的 sleep() 与 condition()。工作流与活动代码必须分文件,工作流运行在 V8 isolate 中,会屏蔽 Node.js 内置模块,若工作流文件导入使用这些模块的活动文件,会导致 Worker 启动崩溃。proxyActivities 必须在工作流模块顶部调用,不能在函数体内调用。Signals 发后不理;需要回复用 defineUpdate(SDK v1.9 起可用)。Task Queue 名称大小写敏感,Worker.create() 与 client.workflow.start() 中的值必须完全一致,否则会形成两个隔离队列,工作流无限排队且无报错。活动超时默认无限,必须显式设置,建议设置 startToCloseTimeout 作为单次尝试上限,并加 scheduleToCloseTimeout 作为硬上限。连接 Temporal Cloud 需在客户端与 Worker 连接中提供地址、TLS 客户端证书与命名空间。
适用场景:需要长时运行、故障恢复、外部事件驱动、审批等待、周期性调度、支付或数据库副作用编排的系统。限制:训练数据可能过时,API 随版本变化,必须以实时文档为准;不遵循确定性、文件分离与队列匹配等约束会导致运行时错误;本资料未提供具体收费与价格信息。