微服务之间的接口调用有没有类似事务的实现 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
Dxxxxs
V2EX    程序员

微服务之间的接口调用有没有类似事务的实现

  • &nbp;
  •   Dxxxxs 2022-03-19 22:26:07 +08:00 1649 次点击
    这是一个创建于 1306 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景

    工作中遇到的一个真实场景 一个电商系统,现在涉及三个独立服务之间的交互 售后服务(负责订单取消动作的发起)、订单服务(负责订单数据的管理)、营销服务(负责券数据的管理)。 现在考虑这样一个场景,某个订单通过活动获得了优惠券。售后服务 需要分别和订单服务营销服务 发生如下交互:

    1. 调用营销服务冻结此订单获得的优惠券
    2. 调用订单管理服务取消订单

    但是有可能发生如下调用结果:

    1. 券冻结成功但是订单取消失败。
    2. 订单取消成功但是券冻结失败。

    现在我的做法是

    先冻结券,然后判断冻结是否成功。如果冻结失败则流程结束,向下游返回无法取消订单的消息。 如果冻结券成功则取消订单,判断订单是否取消成功。如果取消成功流程结束,如果取消失败则重试三次,如果重试 3 次仍然失败则向 DB 插入一条异常记录,用定时任务定时批量重试。

    问题

    但是感觉这样的方案还是实现的不太优雅。 想问一下类似这种不同微服务之间接口调用,还想要达到一种类似 DB 中 事务 的场景有没有更合适的解决方案?

    abinnz
        1
    abinnz  
       2022-03-19 22:30:36 +08:00
    可以了解下阿里的 seata ,一款开源的分布式事务解决方案
    fyibmsd
        2
    fyibmsd  
       2022-03-19 22:38:56 +08:00
    2pc tcc
    5200721
        3
    5200721  
       2022-03-19 22:47:38 +08:00 via Android
    分布式事物
    SmiteChow
        4
    SmiteChow  
       2022-03-21 10:10:51 +08:00
    事务是需要有控制权才能做的,你显然没有其他服务的控制权,但是可以有变通的方法,其他服务在提供正向 API 的情况下配套提供反向撤销 API 就可以了。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5869 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 02:43 PVG 10:43 LAX 19:43 JFK 22:43
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86