分享
  • 收藏
    X
    先提交事务还是先触发事件?
    42
    0
        /**
         * 创建一个用户和用户的关联数据
         * @param array $userData
         * @param array $userFinanceData
         * @return UserModel
         * @throws \Exception
         */
        public function register($userData, $userFinanceData)
        {
            $db = UserModel::query()->getConnection();
            try{
                $db->beginTransaction();
    
                $user = UserModel::create($userData);
                $userFinanceData['user_id'] = $user->id;
                FinanceAccountModel::create($userFinanceData);
                // 事件触发放在这里 1 ?
                $db->commit();
            }catch (\Exception $exception){
                $db->rollBack();
                throw $exception;
            }
            // 事件触发放在这里 2 ?
            event(new UserCreatedEvent($user));
            return $user;
        }

    如果放在[1]处,那么如果数据库事务提交失败,事件却发出去了。导致事件消费者取不到该用户的数据。
    如果放在[2]处,那么如果事件触发失败(例如redis连接错误),用户却创建成功了,但是创建用户后需要做的一些事情没有做,导致用户数据不完整。

    怎么做才好?

    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 10 元积分
        全部回答
    • 0
    更多回答
    扫一扫访问手机版

    回答动态

    设计达人:发布了悬赏问题9414754预计能赚取 0积分收益
    ID也是麻烦事:发布了悬赏问题9414754预计能赚取 0积分收益
    视觉设计:发布了悬赏问题9414754预计能赚取 0积分收益
    爱素材:发布了悬赏问题9414754预计能赚取 0积分收益
    顺姐财姐:发布了悬赏问题9414754预计能赚取 0积分收益
    還好有妳、:发布了悬赏问题9414754预计能赚取 0积分收益
    傷感男丶:发布了悬赏问题9414754预计能赚取 0积分收益
    wcjadmin:发布了悬赏问题9414754预计能赚取 0积分收益
    ╰╮琉璃苣:发布了悬赏问题9414754预计能赚取 0积分收益
    第一财经:发布了悬赏问题9414754预计能赚取 0积分收益