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",
},
},
);请参阅回滚选项了解更多信息。