客戶端 和 GatewayWorker 通訊給服務(wù)發(fā)了一條消息后立馬斷開(kāi),運(yùn)行了幾個(gè)月都正常穩(wěn)定,突然一天出現(xiàn)了一條異常,客戶端給服務(wù)端發(fā)了"1條"消息斷開(kāi)后,服務(wù)端同時(shí)收到了這1條消息2次,排除客戶端重復(fù)發(fā)送的可能性,有沒(méi)有其他原因造成了服務(wù)端“同一時(shí)間”收到了客戶端發(fā)送的1條消息2次?
除非業(yè)務(wù)bug,沒(méi)有其它可能性。
大佬,發(fā)消息這個(gè)地方用了redis鎖,key和客戶端用戶UID對(duì)應(yīng),15秒限制,每天上千萬(wàn)次請(qǐng)求,完美運(yùn)行幾個(gè)月都沒(méi)出現(xiàn)過(guò)這種問(wèn)題,所以基本可以把“客戶端”重復(fù)發(fā)送這個(gè)可能性排除掉。
服務(wù)端沒(méi)有復(fù)雜的業(yè)務(wù),就接消息記錄了下,那么久就出現(xiàn)一次這種情況,同一時(shí)間接到同用戶相同的消息2次,所以我覺(jué)得有點(diǎn)詭異,感覺(jué)問(wèn)題出現(xiàn)在網(wǎng)絡(luò)傳輸階段,但是說(shuō)出不出個(gè)理所當(dāng)然來(lái)。
@1:我們項(xiàng)目以前也遇到過(guò)這類(lèi)“重復(fù)”數(shù)據(jù)情況,一個(gè)用戶操作觸發(fā)了接口2次(前端做了限制只允許1次),后面排查日志是同時(shí)觸發(fā)的,正常使用不會(huì)有那么快手速,看了用戶的網(wǎng)絡(luò)環(huán)境是移動(dòng)運(yùn)營(yíng)商,后面專(zhuān)門(mén)拿手機(jī)在信號(hào)不好的地方復(fù)現(xiàn)出來(lái)了,是運(yùn)營(yíng)商搞的鬼,用戶請(qǐng)求一次,信號(hào)不好的情況下運(yùn)營(yíng)商網(wǎng)絡(luò)可能會(huì)強(qiáng)制變成2次請(qǐng)求。
因?yàn)榭蛻舳税l(fā)消息是直接給一個(gè)外網(wǎng)IP發(fā),我懷疑是不是又是客戶端的運(yùn)營(yíng)商把客戶的消息變成2次發(fā)過(guò)來(lái)了。
@1:http://www.360doc.com/content/18/0424/13/11935121_748340867.shtml 有沒(méi)有這個(gè)可能性?TCP無(wú)法過(guò)濾掉因網(wǎng)絡(luò)延遲而造成二重復(fù)發(fā)