首页 新闻 会员 周边

请问这种场如何锁定比较好呢?

0
悬赏园豆:20 [待解决问题]

在一个微服务系统中,通过聚合层调用业务层,聚合层只负责简单的调用,业务层内部是带数据库事务的,现有A,B两个业务场景,

A业务里订单与客户是一对一的,聚合层直接调用A业务的业务层处理,调用前会在聚合层根据客户账户ID锁定客户账户,以便确保在操作期间账户的金额变动不会被并发.

类似 lock(customerId)

{

...

}

 

B业务里会包含多个订单,它们可能来自不同客户,有点类似打包之后一起处理(业务主表一条数据对应业务明细表里多条订单),当审核主数据时,要求明细数据一起处理成功或失败.

在聚合层调用B业务时,该如何锁定比较好呢?

如果foreach 明细按客户ID分组后逐个锁定来处理的话,

可能会导致某个客户的失败,另一个客户的成功 这种情况,

 

这种情况怎么解决比较好呢?

 

hexllo的主页 hexllo | 菜鸟二级 | 园豆:318
提问于:2021-11-22 09:35
< >
分享
所有回答(1)
0

这是事务的问题,业务B中把更新主表和各个明细表的数据库操作放到一个事务中。
任何一条更新失败就回滚整个事务

wang_yb | 园豆:4891 (老鸟四级) | 2021-11-22 14:41
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册