【发布时间】:2023-03-29 09:55:01
【问题描述】:
我正在研究使用参与者模型框架(具有 akka.net 持久性的 akka.net,但我正在寻找一般案例答案)来构建“小部件订单处理工作流程”。
相当标准:
- 客户订单小部件
- 付款已处理
- 已向客户发送确认电子邮件
- 向仓库发送选择列表消息
- 仓库发回“小部件已发货”消息
- 向客户发送“您的商品已发货”电子邮件
现在假设在 4 和 5 之间发生服务器部署/重启。这将导致演员补水(假设还没有快照)。这意味着我们将再次处理付款,并重新发送已下订单的电子邮件。然而事实证明,我们的客户不喜欢这个“功能”!
如何在使用 Actor 模型框架时防止非幂等操作再次发生?
我考虑过单独存储“为订单数据库表处理的付款”;但这感觉就像我在与框架/范式作斗争,我想知道是否有一种“正确”的方式来做这种事情!
【问题讨论】: