题目
多个工具步骤组成一个业务操作时,如何处理部分成功与补偿?
答案
同一数据库内能用事务完成的步骤,优先交给一个业务接口统一处理。跨系统操作通常无法靠一个数据库事务覆盖,需要记录步骤并设计补偿。 例如“预留库存—创建订单—支付”中支付失败,可以释放库存并关闭订单。每个步骤都记录操作 ID、执行状态和回执;补偿也要幂等、可重试,并有单独的失败状态。 补偿不等于数据库回滚。已经发送的邮件无法收回,已发货商品也不能通过一次接口恢复原状。因此要提前识别不可逆步骤,安排审批或把它们放在条件充分时执行。 ![多步操作失败,按业务规则补偿](https://cs-wiki.oss-cn-shanghai.aliyuncs.com/question/agent-development/extra-compensation-82f5421db511ce98.png) 当补偿失败,保留“待人工处理”而不是宣称整体失败后什么都没发生。最终向用户说明哪些动作已生效、哪些已撤销,以及仍有哪些未解决事项。