跳转到内容
搜索文档

更新日志

Cloudflare 的最新更新与改进。

Back to all posts

Workflows 现已支持回滚

Workflows 现已支持 saga 风格的回滚,允许您向每个 step.do() 添加补偿逻辑,以应对下游故障。如果实例失败,回滚处理程序将按照 step-start 顺序的逆序执行。

这对于涉及外部系统的多步骤操作非常有用,例如库存预留、付款授权、工单创建或基础设施配置。与其将所有清理逻辑编写在顶级 catch 中,不如将每个补偿操作放在其所撤销的步骤旁边。

回滚处理程序支持自己的重试和超时配置,Workflows 现在在实例状态响应中公开回滚结果。Workflows 分析还会发送回滚生命周期事件,使在调试生产工作流时更容易区分正向执行失败和回滚失败。

await step.do(
	"provision resource",
	async () => {
		const resource = await provisionResource();
		return { resourceId: resource.id };
	},
	{
		rollback: async ({ output }) => {
			const { resourceId } = output;
			await deleteResource(resourceId);
		},
		rollbackConfig: {
			retries: { limit: 3, delay: "15 seconds", backoff: "linear" },
			timeout: "2 minutes",
		},
	},
);
await step.do(
	"provision resource",
	async () => {
		const resource = await provisionResource();
		return { resourceId: resource.id };
	},
	{
		rollback: async ({ output }) => {
			const { resourceId } = output as { resourceId: string };
			await deleteResource(resourceId);
		},
		rollbackConfig: {
			retries: { limit: 3, delay: "15 seconds", backoff: "linear" },
			timeout: "2 minutes",
		},
	},
);

请参阅回滚选项了解更多信息。