Skip to content

场景20的重现 #22

@LiWenGu

Description

@LiWenGu

之前线上有过一样的故障异常,后来排查是for循环事务导致的,故障现场精简后如下:

T1 T2
UPDATE test_table SET money = money + 1 WHERE user_id = 5
UPDATE test_table SET money = money + 1 WHERE user_id = 4
UPDATE test_table SET money = money + 1 WHERE user_id = 1
UPDATE test_table SET money = money + 1 WHERE user_id = 2
UPDATE test_table SET money = money + 1 WHERE user_id = 4
UPDATE test_table SET money = money + 1 WHERE user_id = 5

原业务逻辑是这样的:业务端会发送消息,该消息是个 list,里面存放 userId 和 money。消费端在接收的地方加了 @transaction 注解。在高峰情况下,会存在以上的场景,即某两个 userId 存在两个不同的消息中,并一起消费,互相死锁导致的异常。异常日志和 20.md 描述一致。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions