seata的AT模式,如果有多个全局锁@GlobalLock,怎么知道去竞争哪一个
你的逻辑和理解是错误的。就拿:1)扣减库存 2)生成订单 ;这个全局事务进行举例,该全局事务涉及了2个分支事务,涉及库存表 、订单表,那么该全局事务就会生成2个全局锁,2个全局锁的id(lockKeys)是由修改前后库存表、订单表的表中数据id加工而来。
另一个全局事务:4)修改用户状态 5)修改余额状体;如果涉及了2张表那么也会生成2个全局锁,但是这2个全局锁和上面库存表、订单表是没有关系的。
而@GlobalLock 修饰的3)增加库存 这个方法,这个是操作的库存表,那么就和第一个全局事务扣减库存操作的是同一张表,这时候@GlobalLock修改的增加库存这个方法,在commit之前就会去TC那里查询是否有全局事务持有了该库存表的全局锁,有的话就会重试一定的次数,次数尽了还被持有锁则自己就会进行回滚。和另一个全局事务【4)修改用户状态 5)修改余额状体】是没有关系的。
赞0
踩0