DBOS TypeScript 技能是 DBOS 官方 agent-skills 仓库中的一份指南,主题为「DBOS TypeScript Best Practices」,面向使用 DBOS TypeScript SDK 构建可靠、容错应用的开发者。资料说明其目标是 DBOS TypeScript 5.x(包名 @dbos-inc/dbos-sdk);若项目仍在使用 4.x 或已被移除的 API(如 new WorkflowQueue、@DBOS.scheduled/DBOS.registerScheduled、partitionQueue、priorityEnabled、@DBOS.requiredRole、基于 dbos-config.yaml 的配置),应查看 references/advanced-upgrading.md。
适用时机 资料列出应在以下场景参考这些准则:向现有 TypeScript 代码添加 DBOS;创建工作流与步骤;使用队列进行并发控制;实现工作流通信(事件、消息、流);配置与启动 DBOS 应用;从外部应用使用 DBOSClient;测试 DBOS 应用。
规则分类与优先级 规则按优先级划分为多个类别,并带有相应前缀:
- Lifecycle(生命周期)— CRITICAL — lifecycle-
- Workflow(工作流)— CRITICAL — workflow-
- Step(步骤)— HIGH — step-
- Queue(队列)— HIGH — queue-
- Communication(通信)— MEDIUM — comm-
- Pattern(模式)— MEDIUM — pattern-
- Testing(测试)— LOW-MEDIUM — test-
- Client(客户端)— MEDIUM — client-
- Advanced(高级)— LOW — advanced-
关键规则:安装 始终安装最新版 DBOS:npm install @dbos-inc/dbos-sdk@latest
关键规则:配置与启动 DBOS 应用必须在运行任何工作流之前配置并启动 DBOS。资料给出的示例为:引入 { DBOS } from "@dbos-inc/dbos-sdk",在 main 中调用 DBOS.setConfig,传入 name、applicationVersion 和 systemDatabaseUrl(取自环境变量 DBOS_SYSTEM_DATABASE_URL),随后 await DBOS.launch(),再执行工作流。创建新应用时应将 applicationVersion 设为 "0.1.0";若省略,DBOS 会从工作流源码推导出一个不透明哈希。编辑现有应用时应保持其已配置的版本不变——更改版本属于部署决策(见 references/advanced-versioning.md)。
关键规则:工作流与步骤结构 工作流由步骤组成。任何执行复杂操作或访问外部服务的函数都必须通过 DBOS.runStep 作为步骤运行。示例中使用 fetchData 函数并通过 DBOS.runStep(fetchData, { name: "fetchData" }) 调用,再以 DBOS.registerWorkflow 注册工作流。
关键约束 资料明确列出的约束包括:不要在步骤内调用、启动或入队工作流;不要使用线程或非受控并发来启动工作流——应使用 DBOS.startWorkflow 或队列;工作流必须具备确定性——非确定性操作应放入步骤;不要从工作流或步骤修改全局变量;在 DBOS.launch() 之后才注册队列(DBOS.registerQueue)并创建调度(DBOS.applySchedules/DBOS.createSchedule),因为它们存储在系统数据库中;步骤只有在从工作流内调用时才具备持久性,在工作流之外它们只是普通函数调用。
如何使用 资料建议阅读各个规则文件以获取详细说明和示例,列出的文件包括 references/lifecycle-config.md、references/workflow-determinism.md、references/queue-concurrency.md、references/advanced-upgrading.md、references/advanced-shared-database.md。若多个应用共享一个系统数据库,务必在 DBOSClient 上设置 applicationName,并参见 references/advanced-shared-database.md。
参考链接 https://docs.dbos.dev/ 与 https://github.com/dbos-inc/dbos-transact-ts。