Cloudflare Workflows 支持事务回退功能

发布于

Cloudflare Workflows 现在推出了事务回退(saga rollbacks)功能,允许您在步骤内部声明回退逻辑,以防执行失败。这一功能强化了 Workflows 的可靠性,尤其是在处理多个步骤时,确保它们之间的状态一致性。

### 关键点

在新的回退机制中,您可以在每个 `step.do()` 的调用中定义回退逻辑。若某一步骤失败,注册的回退处理程序将会自动执行,以确保之前成功的步骤不会留下不一致的状态,类似于资金转账时的操作:

1. 从银行 A 的账户中扣款。
2. 向银行 B 的账户存款。
3. 向两个账户的所有者发送电子邮件确认。

假设第二步,即往银行 B 存款失败,资金已经从银行 A 扣除,如何处理呢?我们只能通过新的操作,将扣除的金额返还给银行 A,而不能直接撤销扣款。通过这次更新,开发者能够在 <code>step.do()</code> 的参数中定义补偿逻辑,从而简化了事务管理的复杂性。

### 示例代码

要使用回退功能,只需将一个包含 <code>rollback</code> 函数的选项对象作为最后一个参数传递给 <code>step.do()</code>:

```javascript
const debit = await step.do(
"debit-account-a",
async () => {
return await bankA.debit({
accountId: fromAccountId,
amount,
idempotencyKey: \
`${transferId}:debit-account-a`,
});
},
{
rollback: async () => {
await bankA.credit({
accountId: fromAccountId,
amount,
idempotencyKey: \
`${transferId}:rollback-debit-account-a`,
});
},
}
);
```

### 设计理念

这一机制的设计为开发者提供了清晰、简单的方法来处理事务回退,确保即使在复杂的操作过程中,开发者也不需要手动处理回退逻辑。回退操作的执行顺序和逻辑都相对一致,确保了事务的完整性和可靠性。

### 结语

Cloudflare Workflows 的此次更新为开发者提供了更简化和更可靠的方式来管理多步骤操作,尤其是在处理银行转账等需要保证状态一致性的场景中,极大地提高了开发效率和系统稳定性。

---

原文链接:[点击查看](https://blog.cloudflare.com/rollbacks-for-workflows/)

评论

暂无评论。