開心一刻
昨晚和媳婦坐在沙發(fā)上刷視頻
我用手肘輕輕推了推媳婦:你看這渣男,玩完女的都不娶人家
媳婦:哎喲我天,哎呀媽,我這也沒好哪去呀
我疑惑的看向媳婦:啥意思啊
媳婦看向自己的手機(jī):啥意思啊,特么有些人,娶完了也不玩呀
背景介紹
我負(fù)責(zé)的系統(tǒng)需要同步上游系統(tǒng)的數(shù)據(jù)
同步機(jī)制分兩步
1、上游系統(tǒng)數(shù)據(jù)變動(dòng)了,會(huì)下發(fā)消息,通知下游系統(tǒng):我這邊數(shù)據(jù)更新了,你們愛咋辦咋辦啊
2、下游系統(tǒng)收到消息后,會(huì)調(diào)上游系統(tǒng)提供的數(shù)據(jù)查詢接口:請(qǐng)給我最新的數(shù)據(jù)
你情我愿,沒有強(qiáng)買強(qiáng)賣,簡(jiǎn)直就是天作之合!
問題復(fù)現(xiàn)
我先模擬下兩個(gè)系統(tǒng),免得你們說我:光說不練假把式
環(huán)境準(zhǔn)備
消息組件:?RabbitMQ?3.9.11?
數(shù)據(jù)庫(kù):?MySQL 8.0.30?
上游系統(tǒng):?spring-boot-front?,源碼地址:spring-boot-front
下游系統(tǒng):?spring-boot-after?,源碼地址:spring-boot-after
假設(shè)目前一致狀態(tài)是:
?front?端將 張三 密碼調(diào)整成?zhangsan1?
我們來(lái)看下效果
?after?很快就成功同步了 張三 的密碼?zhangsan1?
一切有條不紊的進(jìn)行著,平靜的就像你的女神回復(fù)你的消息一樣,簡(jiǎn)直是輪回!
突然的熱情
當(dāng)你以為一切塵埃落定,開始放下過往,準(zhǔn)備面向未來(lái)的時(shí)候
你的女神發(fā)來(lái)了一個(gè)消息
此刻的你無(wú)比糾結(jié),是繼續(xù)舔還是果斷斷?
我們來(lái)模擬下她突然的消息
調(diào)整下?front?的代碼
在發(fā)消息之后睡眠?100?毫秒
將 李四 的密碼調(diào)整成?lisi111?
李四的密碼竟然沒同步成功!
打開女神的消息一看,特喵的竟然不是關(guān)心,是借錢!
問題修復(fù)
已經(jīng)有女神折磨你們了,我就不折磨你們了
?front?的這段代碼
是有問題的!
我給你們分析下
?front?事務(wù)未提交,消息就發(fā)給下游了
?after?收到消息后,查詢?front?接口的時(shí)候,?front?的事務(wù)若還未提交,?front?又當(dāng)如何應(yīng)對(duì)?
還能怎么應(yīng)對(duì),只能給舊數(shù)據(jù)了唄,是不是懂了?
既然找到原因了,就很好處理了
把所有她的聯(lián)系方式都刪了,問題就完美解決了
我好像偏題了,回到主題,問題同樣很好處理
把消息發(fā)送從事務(wù)中拎出來(lái)就好了,也就是等事務(wù)提交后,再發(fā)消息
或者直接把要同步的數(shù)據(jù)以消息的方式直接同步給下游系統(tǒng),下游系統(tǒng)拿到消息直接更新數(shù)據(jù),而不用再調(diào)用上游系統(tǒng)的接口來(lái)查詢數(shù)據(jù)(但要考慮消息體的大?。?/p>
通篇看下來(lái)是不是很精彩,此處應(yīng)該有掌聲
總結(jié)
1、日志很重要,很重要,很重要!
樓主這次排查這個(gè)問題還是很快的,因?yàn)槿罩敬蛴〉谋容^全,根據(jù)日志很快就能定位到接口查到的是舊數(shù)據(jù)
這就好比借錢:一定保留轉(zhuǎn)賬記錄,現(xiàn)金的話要打借條
2、圈子不同,不要強(qiáng)融
好好的消息發(fā)送,為什么非要寫到事務(wù)中?文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-777074.html
事務(wù)盡量縮小文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-777074.html
到了這里,關(guān)于記一次線上問題 → 偶爾的熱情真的難頂呀!的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!