第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

請(qǐng)教各位一個(gè)問題,求解答:先提交事務(wù)還是先觸發(fā)事件?跪求!

請(qǐng)教各位一個(gè)問題,求解答:先提交事務(wù)還是先觸發(fā)事件?跪求!

動(dòng)漫人物 2019-10-08 13:20:14
/***創(chuàng)建一個(gè)用戶和用戶的關(guān)聯(lián)數(shù)據(jù)*@paramarray$userData*@paramarray$userFinanceData*@returnUserModel*@throws\Exception*/publicfunctionregister($userData,$userFinanceData){$db=UserModel::query()->getConnection();try{$db->beginTransaction();$user=UserModel::create($userData);$userFinanceData['user_id']=$user->id;FinanceAccountModel::create($userFinanceData);//事件觸發(fā)放在這里1?$db->commit();}catch(\Exception$exception){$db->rollBack();throw$exception;}//事件觸發(fā)放在這里2?event(newUserCreatedEvent($user));return$user;}如果放在[1]處,那么如果數(shù)據(jù)庫事務(wù)提交失敗,事件卻發(fā)出去了。導(dǎo)致事件消費(fèi)者取不到該用戶的數(shù)據(jù)。如果放在[2]處,那么如果事件觸發(fā)失?。ɡ鐁edis連接錯(cuò)誤),用戶卻創(chuàng)建成功了,但是創(chuàng)建用戶后需要做的一些事情沒有做,導(dǎo)致用戶數(shù)據(jù)不完整。怎么做才好?
查看完整描述

2 回答

?
慕妹3242003

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超6個(gè)贊

這種問題,你沒法避免的,分布式事務(wù)的問題。有一種可以參考下你在數(shù)據(jù)庫表里面建立一個(gè)事件表,就是要發(fā)的事件,隨事務(wù)一起提交。提交完后,你再去發(fā)了,發(fā)完記得在數(shù)據(jù)庫的記錄上做一個(gè)標(biāo)記了,一個(gè)狀態(tài)是新建未發(fā)送,一個(gè)是已發(fā)送。另外,還得有一個(gè)線程池去掃那個(gè)表,去發(fā)那些發(fā)失敗的。接受事件的地方,還得做冪等。如果要更可靠的話,事件表的標(biāo)記在加一個(gè)已處理,反正要就是比較麻煩了,要考慮的很多
                            
查看完整回答
反對(duì) 回復(fù) 2019-10-08
?
富國滬深

TA貢獻(xiàn)1790條經(jīng)驗(yàn) 獲得超9個(gè)贊

給一個(gè)方案,用戶數(shù)據(jù)增加一個(gè)step字段,表示生成過程的整個(gè)步驟,每完成一步改一下,然后定時(shí)查看數(shù)據(jù)庫里沒有完成的數(shù)據(jù),然后繼續(xù)執(zhí)行,可以保證最終一致性。這樣設(shè)計(jì)的一個(gè)要求是,事件觸發(fā)的處理程序是冪等的,同一個(gè)事件,只會(huì)觸發(fā)一次或者說觸發(fā)多次不會(huì)有副作用
//生成用戶
$db->beginTransaction();
$user=UserModel::create($userData);
$user->step=1;
$db->commit();
//觸發(fā)事件
$db->beginTransaction();
event(newUserCreatedEvent($user));
$user->step=2;
$db->commit();
定時(shí)任務(wù)
//獲取生成3分鐘后還沒發(fā)通知的用戶數(shù)據(jù)
$sql='select*formuserwherestatus=1andaddtime...
//重新發(fā)送
event(newUserCreatedEvent($user));
$user->step=2;
$db->commit();
                            
查看完整回答
反對(duì) 回復(fù) 2019-10-08
  • 2 回答
  • 0 關(guān)注
  • 273 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)