用gatewayworker開(kāi)發(fā)的接口,為了解耦數(shù)據(jù)庫(kù),每接到一條數(shù)據(jù),就通過(guò)syslog()來(lái)存入Rsyslog,Rsyslog再連接數(shù)據(jù)庫(kù)mysql,將數(shù)據(jù)寫入到數(shù)據(jù)庫(kù);數(shù)據(jù)庫(kù)插入后對(duì)數(shù)據(jù)進(jìn)行分析,收到一條回復(fù)一條ACknowledge,ack通過(guò)觸發(fā)器用mysql-udf-http post到 gateway的一個(gè)http口上;post的數(shù)據(jù)庫(kù)客戶端client_id 和ACK的內(nèi)容。剛開(kāi)始都正常,但開(kāi)一個(gè)多小時(shí)后接口就得只收不發(fā)了。重起gateway能恢復(fù),不知道是什么問(wèn)題。
還有一個(gè)問(wèn)題,出現(xiàn)兩次,都是大量往數(shù)據(jù)庫(kù)寫重復(fù)日志,一次寫了五千多條,一次寫了幾十萬(wàn)條。
關(guān)了接口都還在寫,應(yīng)該是rsyslog的spool文件緩存里還有日志沒(méi)寫進(jìn)數(shù)據(jù)庫(kù)。重起rsyslog后正常。
但總的來(lái)說(shuō)應(yīng)該是哪里有問(wèn)題。onMessage,里面我一個(gè)循還都沒(méi)寫,接口就是單純的收發(fā)數(shù)據(jù),處理數(shù)據(jù)都是mysql觸發(fā)器和存儲(chǔ)過(guò)程。各位前輩給我指點(diǎn)指點(diǎn),這是我第一次做軟件開(kāi)發(fā),沒(méi)什么經(jīng)驗(yàn),以前只做過(guò)運(yùn)維和網(wǎng)絡(luò)。
解決了,是Rsyslog配置問(wèn)題和數(shù)據(jù)庫(kù)邏輯有問(wèn)題,遇錯(cuò)會(huì)出限無(wú)限重試的情況,改掉了邏輯錯(cuò)誤,并將遇到錯(cuò)誤改成重試100次。