鍍金池/ 問(wèn)答/數(shù)據(jù)庫(kù)/ Mysq主主復(fù)制,獲取到了提交事務(wù)之前的數(shù)據(jù)

Mysq主主復(fù)制,獲取到了提交事務(wù)之前的數(shù)據(jù)

背景

有兩個(gè)數(shù)據(jù)庫(kù)節(jié)點(diǎn),互為主備(暫且稱為sqlnode1和sqlnode2)。有兩個(gè)系統(tǒng)A和B,還有一個(gè)數(shù)據(jù)交換服務(wù)。
系統(tǒng)A的訂單支付后,需要通知系統(tǒng)B。通知是通過(guò)數(shù)據(jù)交換服務(wù)實(shí)現(xiàn)的。系統(tǒng)A支付完成,在提交事務(wù)之后,向數(shù)據(jù)交換服務(wù)發(fā)送支付成功消息,數(shù)據(jù)交換服務(wù)根據(jù)消息從數(shù)據(jù)庫(kù)中獲取出訂單數(shù)據(jù),組裝成系統(tǒng)B需要的數(shù)據(jù),然后發(fā)送到系統(tǒng)B中。

問(wèn)題

系統(tǒng)A支付成功 -> 保存數(shù)據(jù)到sqlnode1中 -> 提交事務(wù) -> 向數(shù)據(jù)交換服務(wù)發(fā)送消息 -> 從sqlnode2中獲取訂單數(shù)據(jù)。

問(wèn)題就在于在sqlnode1中的數(shù)據(jù)同步到sqlnode2之前,數(shù)據(jù)交換服務(wù)從sqlnode2中把數(shù)據(jù)取了出來(lái)。這就導(dǎo)致了數(shù)據(jù)交換服務(wù)拼裝的是變更之前的數(shù)據(jù)。

暫時(shí)沒(méi)有從網(wǎng)上找到類似事件的處理方式,求大神支招

回答
編輯回答
冷溫柔

我的建議是不從sql2中去拿數(shù)據(jù),既然能存表就證明這些數(shù)據(jù)你是知道的,那為什么還要再去取一次呢 何不直接用存表前的數(shù)據(jù)去操作下一個(gè)步驟呢

2018年4月10日 16:54