工作中遇到的一个真实场景 一个电商系统,现在涉及三个独立服务之间的交互 售后服务(负责订单取消动作的发起)、订单服务(负责订单数据的管理)、营销服务(负责券数据的管理)。 现在考虑这样一个场景,某个订单通过活动获得了优惠券。售后服务 需要分别和订单服务、营销服务 发生如下交互:
但是有可能发生如下调用结果:
先冻结券,然后判断冻结是否成功。如果冻结失败则流程结束,向下游返回无法取消订单的消息。 如果冻结券成功则取消订单,判断订单是否取消成功。如果取消成功流程结束,如果取消失败则重试三次,如果重试 3 次仍然失败则向 DB 插入一条异常记录,用定时任务定时批量重试。
但是感觉这样的方案还是实现的不太优雅。 想问一下类似这种不同微服务之间接口调用,还想要达到一种类似 DB 中 事务 的场景有没有更合适的解决方案?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.