Appearance
如何使用 DBOS 构建高可靠的 TypeScript 耐久工作流
解决分布式应用中的状态丢失与执行失败问题:通过 DBOS 的耐久工作流(Durable Workflows)机制,确保 TypeScript 业务逻辑在面对崩溃或网络波动时能够可靠地恢复执行。
为什么需要这个技能
在传统的 TypeScript 后端开发中,如果一个长耗时的业务流程(如订单处理、多步 API 调用)在执行中途崩溃,很难在原处精准恢复,通常需要编写复杂的重试机制和状态机。
DBOS 将“工作流”的概念引入 TypeScript,通过将逻辑拆分为可记录的“步骤(Step)”,自动持久化执行状态。即使服务器重启,系统也能根据记录自动跳过已完成的步骤,直接从失败点继续执行,从而构建出天然具备容错能力的健壮应用。
适用场景
- 复杂业务链路:需要跨多个外部服务调用且必须保证最终一致性的流程。
- 高可靠任务处理:不能因为临时故障而导致任务丢失的异步处理场景。
- 并发控制:需要通过队列(Queue)严格控制并发量以保护下游资源的场景。
- 状态机替代:用顺序代码代替繁琐的状态数据库更新逻辑。
核心工作流
1. 环境初始化与启动
在运行任何工作流之前,必须先配置并启动 DBOS 运行时:
typescript
import { DBOS } from "@dbos-inc/dbos-sdk";
async function main() {
DBOS.setConfig({
name: "my-app",
systemDatabaseUrl: process.env.DBOS_SYSTEM_DATABASE_URL,
});
await DBOS.launch();
await myWorkflow();
}
main().catch(console.log);2. 拆分工作流与步骤
DBOS 的核心原则是:工作流定义逻辑,步骤执行操作。任何涉及外部 I/O 或复杂操作的函数必须通过 DBOS.runStep 调用。
typescript
import { DBOS } from "@dbos-inc/dbos-sdk";
async function fetchData() {
return await fetch("https://api.example.com").then(r => r.json());
}
async function myWorkflowFn() {
// 关键:使用 runStep 保证该步骤的可恢复性
const result = await DBOS.runStep(fetchData, { name: "fetchData" });
return result;
}
const myWorkflow = DBOS.registerWorkflow(myWorkflowFn);3. 遵循核心约束
为了确保工作流的确定性(Determinism)和可靠性,必须遵守以下禁令:
- 禁止在 Step 内部调用、启动或将工作流加入队列。
- 禁止在工作流中使用非确定性操作(如
Math.random()或Date.now()),这些操作必须放入 Step 中执行。 - 禁止在工作流或步骤中修改全局变量。
- 并发控制:不要使用原生的
Promise.all或多线程启动工作流,应使用DBOS.startWorkflow或 DBOS 队列。
下载和安装
下载 dbos-typescript 中文版 Skill ZIP
解压后将目录放入你的 AI 工具 skills 文件夹,重启工具后即可使用。具体路径参考内附的 USAGE.zh.md。
你可能还需要
暂无推荐