自從上次出現(xiàn)了mysql has gone away 錯(cuò)誤以后 ,有朋友回答是鏈接超時(shí)原因 引起的。 gateway 模型里 常駐內(nèi)存運(yùn)行的 連接 能否做一個(gè)機(jī)制 在底層 建立起的連接 每一定時(shí)間 向mysql服務(wù) 請(qǐng)求一次 以保持 連接不被斷開呢? 我了解到 gateway 目前的方式 還是太被 動(dòng)了,是等到請(qǐng)求時(shí) 發(fā)現(xiàn)已經(jīng)報(bào)錯(cuò) 再連接一次 。這么做的話 后面的再連接一次 也不是太穩(wěn)固。 我現(xiàn)在的gateway里 就還是出現(xiàn)了 gone away。
還有 其實(shí)定時(shí)ping 和 出錯(cuò)時(shí)重連不沖突 可以雙管齊下 ,定時(shí)ping 間隔時(shí)間長(zhǎng) 對(duì)資源消耗 可以忽略不計(jì)啊。 另外 ,到出錯(cuò)時(shí)的重連 排除硬性因素(比如mysql 服務(wù)宕機(jī)等) 在連接已經(jīng)失效的情況下 重連 成功率高嗎? 會(huì)不會(huì)再次連接不成功。這種情況怎么處理呢? 畢竟服務(wù)不容出差錯(cuò)啊。 關(guān)鍵時(shí)刻 取不到數(shù)據(jù) 這是致命的。
雙管齊下有點(diǎn)多余了,如果開發(fā)者想要定時(shí)ping,加個(gè)定時(shí)器就好,非常簡(jiǎn)單。
在連接已經(jīng)失效的情況下 重連 成功率高嗎?
msyql關(guān)閉鏈接的時(shí)間一般是8小時(shí),8小時(shí)只重連一次,效率問(wèn)題完全可以忽略。另外8小時(shí)都沒請(qǐng)求,這個(gè)業(yè)務(wù)也并不是繁忙業(yè)務(wù),也不用考慮這點(diǎn)消耗。
會(huì)不會(huì)再次連接不成功。這種情況怎么處理呢?畢竟服務(wù)不容出差錯(cuò)啊。 關(guān)鍵時(shí)刻 取不到數(shù)據(jù) 這是致命的。
出現(xiàn)mysql gone away 后DbConnection只會(huì)重連一次,如果失敗,就拋異常。業(yè)務(wù)可以捕獲這個(gè)異常,然后根據(jù)數(shù)據(jù)重要情況自行決定如何處理。如果沒捕獲異常進(jìn)程會(huì)退出重啟一次。