一種傳輸異常事件的處理方法和裝置制造方法
【專利摘要】本發(fā)明公開(kāi)了一種傳輸異常事件的處理方法和裝置,檢測(cè)異常事件隊(duì)列的長(zhǎng)度,當(dāng)異常事件隊(duì)列的長(zhǎng)度小于L時(shí),檢測(cè)存儲(chǔ)介質(zhì)上是否存在存儲(chǔ)傳輸異常事件的臨時(shí)文件;當(dāng)存在臨時(shí)文件時(shí),將臨時(shí)文件中存儲(chǔ)的傳輸異常事件按接收的時(shí)間順序加入異常事件隊(duì)列中;如果異常事件隊(duì)列的長(zhǎng)度達(dá)到L時(shí)臨時(shí)文件中仍有數(shù)據(jù),則將獲取的傳輸異常事件寫入臨時(shí)文件中;按先進(jìn)先出的順序處理異常事件隊(duì)列中的傳輸異常事件。本發(fā)明的傳輸異常事件的處理方法和裝置,基于時(shí)序邏輯對(duì)傳輸異常進(jìn)行處理,利用內(nèi)存和文件雙重結(jié)合的方式對(duì)通訊中異常的數(shù)據(jù)進(jìn)行恢復(fù),提高了事件傳輸過(guò)程的效率,保證事件傳輸過(guò)程的可靠性,保證事件傳輸過(guò)程的完整性。
【專利說(shuō)明】一種傳輸異常事件的處理方法和裝置
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及網(wǎng)絡(luò)通信【技術(shù)領(lǐng)域】,尤其涉及一種傳輸異常事件的處理方法和裝置。
【背景技術(shù)】
[0002] 目前,B/S架構(gòu)可以適應(yīng)最普遍的網(wǎng)絡(luò)架構(gòu),例如,SOC (Security Operations Center)作為安全運(yùn)營(yíng)平臺(tái),組件間通信基于HTTP方式,需要實(shí)時(shí)采集大量日志數(shù)據(jù)進(jìn)行 分析。通信中的接收方為上級(jí),發(fā)送方為下級(jí)。下級(jí)向上級(jí)通信稱為上送,上送采用HTTP 請(qǐng)求(GET或者POST)報(bào)文,通過(guò)請(qǐng)求包的頭部、正文傳輸上送內(nèi)容。上級(jí)向下級(jí)通信稱為 下發(fā),下發(fā)采用HTTP響應(yīng)報(bào)文,通過(guò)響應(yīng)頭部的狀態(tài)碼通知上送內(nèi)容是否成功;并且,通過(guò) 響應(yīng)報(bào)文的其他頭部、正文傳輸下發(fā)內(nèi)容。上級(jí)向下級(jí)下發(fā)內(nèi)容,通過(guò)HTTP響應(yīng)報(bào)文的方 式傳遞,為異步方式,有一定延時(shí)。
[0003] 在S0C平臺(tái)中,無(wú)論是上送的事件,下傳的配置,都必需保證準(zhǔn)確的到達(dá)相關(guān)的組 件,并且需要保證事件之間的時(shí)序邏輯,如果出現(xiàn)丟失的情況,將導(dǎo)致整個(gè)S0C平臺(tái)無(wú)法正 常運(yùn)行。例如,在HTTP的通訊中,HTTP為了應(yīng)對(duì)大量連接請(qǐng)求的情況規(guī)定客戶端與服務(wù)端 只保持短暫的連接,客戶端的每次請(qǐng)求都需要與服務(wù)端建立一個(gè)TCP連接,服務(wù)端完成請(qǐng) 求處理后立即斷開(kāi)TCP連接,服務(wù)端不跟蹤每個(gè)客戶端也不記錄過(guò)去的請(qǐng)求。這樣的情況 下,會(huì)出現(xiàn)大量的數(shù)據(jù)的不確定性,需要使用額外添加的異常處理和恢復(fù)的機(jī)制,事件和配 置的異常處理比較困難,而內(nèi)存中的異常處理也無(wú)法達(dá)到海量事件的存儲(chǔ)和配置信息的更 新。
【發(fā)明內(nèi)容】
[0004] 有鑒于此,本發(fā)明要解決的一個(gè)技術(shù)問(wèn)題是提供一種傳輸異常事件的處理方法, 利用內(nèi)存和文件結(jié)合的方式對(duì)異常的數(shù)據(jù)進(jìn)行恢復(fù)。
[0005] -種傳輸異常事件的處理方法,包括:在傳輸數(shù)據(jù)出現(xiàn)異常時(shí),獲取未成功傳輸?shù)?數(shù)據(jù),其中,所述未成功傳輸?shù)臄?shù)據(jù)作為傳輸異常事件;檢測(cè)異常事件隊(duì)列的長(zhǎng)度;當(dāng)所述 異常事件隊(duì)列的長(zhǎng)度小于L時(shí),檢測(cè)存儲(chǔ)介質(zhì)上是否存在存儲(chǔ)傳輸異常事件的臨時(shí)文件; 其中,當(dāng)存在所述臨時(shí)文件時(shí),將所述臨時(shí)文件中存儲(chǔ)的傳輸異常事件按接收的時(shí)間順序 加入所述異常事件隊(duì)列中;如果所述異常事件隊(duì)列的長(zhǎng)度達(dá)到L時(shí)所述臨時(shí)文件中仍有數(shù) 據(jù),則將獲取的傳輸異常事件寫入所述臨時(shí)文件中;如果所述異常事件隊(duì)列的長(zhǎng)度未達(dá)到 L時(shí)所述臨時(shí)文件已清空,則將獲取的傳輸異常事件寫入所述異常事件隊(duì)列;如果不存在 所述臨時(shí)文件時(shí),將則將獲取的傳輸異常事件寫入所述異常事件隊(duì)列;當(dāng)所述異常事件隊(duì) 列的長(zhǎng)度大于L時(shí),則將獲取的傳輸異常事件寫入所述臨時(shí)文件中;按先進(jìn)先出的順序處 理所述異常事件隊(duì)列中的傳輸異常事件;其中,L為設(shè)定的所述異常事件隊(duì)列的最大長(zhǎng)度, 所述傳輸異常原因包括:TCP連接異常、數(shù)據(jù)庫(kù)連接失敗。
[0006] 根據(jù)本發(fā)明的方法的一個(gè)實(shí)施例,進(jìn)一步的,當(dāng)所述異常事件隊(duì)列的長(zhǎng)度小于N 時(shí),將所述臨時(shí)文件中存儲(chǔ)的傳輸異常事件按接收的時(shí)間順序加入所述異常事件隊(duì)列中, 其中,L>N。
[0007] 根據(jù)本發(fā)明的方法的一個(gè)實(shí)施例,進(jìn)一步的,接收客戶設(shè)備發(fā)送的消息,并將所述 消息發(fā)送到上級(jí)或下級(jí)服務(wù)器;所述消息被正常發(fā)送完成后,將鏈接狀態(tài)參數(shù)的值設(shè)置為 正??臻e狀態(tài);當(dāng)與上級(jí)或下級(jí)服務(wù)器之間的TCP連接出現(xiàn)異常時(shí),將所述鏈接狀態(tài)參數(shù) 的值設(shè)置為通信故障狀態(tài),并將客戶設(shè)備發(fā)送的消息作為傳輸異常事件,存儲(chǔ)在所述異常 事件隊(duì)列或臨時(shí)文件中;所述客戶設(shè)備發(fā)送的消息包括:日志消息、告警消息。
[0008] 根據(jù)本發(fā)明的方法的一個(gè)實(shí)施例,進(jìn)一步的,接收到客戶設(shè)備發(fā)送的消息,獲取所 述鏈接狀態(tài)參數(shù)的值;當(dāng)所述鏈接狀態(tài)參數(shù)的值為正常空閑狀態(tài)時(shí),將所述消息發(fā)送到上 級(jí)或下級(jí)服務(wù)器;當(dāng)所述鏈接狀態(tài)參數(shù)的值為通信故障狀態(tài)時(shí),將所述消息作為傳輸異常 事件,檢測(cè)所述異常事件隊(duì)列的長(zhǎng)度,當(dāng)所述異常事件隊(duì)列的長(zhǎng)度小于L、并存在所述臨時(shí) 文件時(shí),將所述臨時(shí)文件中存儲(chǔ)的傳輸異常事件按接收的時(shí)間順序加入所述異常事件隊(duì)列 中;如果所述異常事件隊(duì)列的長(zhǎng)度達(dá)到L時(shí)所述臨時(shí)文件中仍有數(shù)據(jù),則將所述消息寫入 所述臨時(shí)文件中;如果所述異常事件隊(duì)列的長(zhǎng)度未達(dá)到L時(shí)所述臨時(shí)文件已清空,則將所 述消息寫入所述異常事件隊(duì)列;當(dāng)不存在所述臨時(shí)文件時(shí),將則將所述消息寫入所述異常 事件隊(duì)列;當(dāng)所述異常事件隊(duì)列的長(zhǎng)度大于L時(shí),則將所述消息寫入所述臨時(shí)文件中;其 中,當(dāng)所述異常事件隊(duì)列和所述臨時(shí)文件中都沒(méi)有傳輸異常事件,并且,與上級(jí)或下級(jí)服務(wù) 器之間的TCP連接恢復(fù)正常時(shí),將所述鏈接狀態(tài)參數(shù)的值設(shè)置為正??臻e狀態(tài)。
[0009] 根據(jù)本發(fā)明的方法的一個(gè)實(shí)施例,進(jìn)一步的,啟動(dòng)心跳線程,用于檢測(cè)與上級(jí)或下 級(jí)服務(wù)器之間的TCP連接狀態(tài);啟動(dòng)事件處理線程,用于處理所述異常事件隊(duì)列中的傳輸 異常事件;當(dāng)所述臨時(shí)文件的大小超過(guò)閾值,使用GZIP方式對(duì)所述臨時(shí)文件進(jìn)行壓縮。 [0010] 本發(fā)明要解決的一個(gè)技術(shù)問(wèn)題是提供一種傳輸異常事件的處理裝置,利用內(nèi)存和 文件結(jié)合的方式對(duì)異常的數(shù)據(jù)進(jìn)行恢復(fù)。
[0011] 一種傳輸異常事件的處理裝置,包括:異常事件獲取單元,用于在傳輸數(shù)據(jù)出現(xiàn)異 常時(shí),獲取未成功傳輸?shù)臄?shù)據(jù),其中,所述未成功傳輸?shù)臄?shù)據(jù)作為傳輸異常事件;異常事件 存儲(chǔ)單元,用于檢測(cè)異常事件隊(duì)列的長(zhǎng)度;當(dāng)所述異常事件隊(duì)列的長(zhǎng)度小于L時(shí),檢測(cè)存儲(chǔ) 介質(zhì)上是否存在存放傳輸異常事件的臨時(shí)文件;當(dāng)存在所述臨時(shí)文件時(shí),將所述臨時(shí)文件 中存儲(chǔ)的傳輸異常事件按接收的時(shí)間順序加入所述異常事件隊(duì)列中;如果所述異常事件隊(duì) 列的長(zhǎng)度達(dá)到L時(shí)所述臨時(shí)文件中仍有數(shù)據(jù),則將獲取的傳輸異常事件寫入所述臨時(shí)文件 中;如果所述異常事件隊(duì)列的長(zhǎng)度未達(dá)到L時(shí)所述臨時(shí)文件已清空,則將獲取的傳輸異常 事件寫入所述異常事件隊(duì)列;如果不存在所述臨時(shí)文件,將則將獲取的傳輸異常事件寫入 所述異常事件隊(duì)列;當(dāng)所述異常事件隊(duì)列的長(zhǎng)度大于L時(shí),則將獲取的傳輸異常事件寫入 所述臨時(shí)文件中;異常事件處理單元,用于按先進(jìn)先出的順序處理所述異常事件隊(duì)列中的 傳輸異常事件;其中,所述傳輸異常原因包括:TCP連接異常、數(shù)據(jù)庫(kù)連接失敗。
[0012] 根據(jù)本發(fā)明的裝置的一個(gè)實(shí)施例,進(jìn)一步的,當(dāng)所述異常事件隊(duì)列的長(zhǎng)度小于N 時(shí),所述異常事件處理單元將所述臨時(shí)文件中存儲(chǔ)的傳輸異常事件按接收的時(shí)間順序加入 所述異常事件隊(duì)列中。
[0013] 根據(jù)本發(fā)明的裝置的一個(gè)實(shí)施例,進(jìn)一步的,消息收發(fā)單元,用于接收客戶設(shè)備發(fā) 送的消息,并將所述消息發(fā)送到上級(jí)或下級(jí)服務(wù)器;所述消息被正常發(fā)送完成后,將鏈接狀 態(tài)參數(shù)的值設(shè)置為正??臻e狀態(tài);當(dāng)與上級(jí)或下級(jí)服務(wù)器之間的TCP連接出現(xiàn)異常時(shí),所 述消息收發(fā)單元將所述鏈接狀態(tài)參數(shù)的值設(shè)置為通信故障狀態(tài),并將客戶設(shè)備發(fā)送的消息 作為傳輸異常事件,存儲(chǔ)在所述異常事件隊(duì)列或臨時(shí)文件中;所述客戶設(shè)備發(fā)送的消息包 括:日志消息、告警消息。
[0014] 根據(jù)本發(fā)明的裝置的一個(gè)實(shí)施例,進(jìn)一步的,所述消息收發(fā)單元接收到客戶設(shè)備 發(fā)送的消息,并獲取所述鏈接狀態(tài)參數(shù)的值;當(dāng)所述鏈接狀態(tài)參數(shù)的值為正??臻e狀態(tài)時(shí), 所述消息收發(fā)單元將所述消息發(fā)送到上級(jí)或下級(jí)服務(wù)器;當(dāng)所述鏈接狀態(tài)參數(shù)的值為通信 故障狀態(tài)時(shí),所述消息收發(fā)單元將客戶設(shè)備發(fā)送的消息作為傳輸異常事件,并發(fā)送到所述 異常事件獲取單元;所述異常事件存儲(chǔ)單元檢測(cè)所述異常事件隊(duì)列的長(zhǎng)度,當(dāng)所述異常事 件隊(duì)列的長(zhǎng)度小于L、并存在所述臨時(shí)文件時(shí),將所述臨時(shí)文件中存儲(chǔ)的傳輸異常事件按接 收的時(shí)間順序加入所述異常事件隊(duì)列中;如果所述異常事件隊(duì)列的長(zhǎng)度達(dá)到L時(shí)所述臨時(shí) 文件中仍有數(shù)據(jù),所述異常事件存儲(chǔ)單元?jiǎng)t將所述消息寫入所述臨時(shí)文件中;如果所述異 常事件隊(duì)列的長(zhǎng)度未達(dá)到L時(shí)所述臨時(shí)文件已清空,則所述異常事件存儲(chǔ)單元將所述消息 寫入所述異常事件隊(duì)列;當(dāng)不存在所述臨時(shí)文件時(shí),則所述異常事件存儲(chǔ)單元將所述消息 寫入所述異常事件隊(duì)列;當(dāng)所述異常事件隊(duì)列的長(zhǎng)度大于L時(shí),則將所述消息寫入所述臨 時(shí)文件中;其中,當(dāng)所述異常事件隊(duì)列和臨時(shí)文件中都沒(méi)有傳輸異常事件,并且,與上級(jí)或 下級(jí)服務(wù)器之間的TCP連接回復(fù)正常時(shí),所述異常事件處理單元將鏈接狀態(tài)參數(shù)的值設(shè)置 為正??臻e狀態(tài)。
[0015] 根據(jù)本發(fā)明的裝置的一個(gè)實(shí)施例,進(jìn)一步的,心跳單元啟動(dòng)心跳線程,用于檢測(cè)與 上級(jí)或下級(jí)服務(wù)器之間的TCP連接狀態(tài);所述消息收發(fā)單元啟動(dòng)事件處理線程,用于處理 所述異常事件隊(duì)列中的傳輸異常事件;當(dāng)所述臨時(shí)文件的大小超過(guò)閾值,使用GZIP方式對(duì) 所述臨時(shí)文件進(jìn)行壓縮。
[0016] 本發(fā)明的傳輸異常事件的處理方法和裝置,基于時(shí)序邏輯對(duì)傳輸異常進(jìn)行處理, 利用內(nèi)存和文件雙重結(jié)合的方式對(duì)通訊中異常的數(shù)據(jù)進(jìn)行恢復(fù),加入了緩存機(jī)制保證傳輸 的可靠性,可以處理更長(zhǎng)的通訊中斷帶來(lái)的功能和性能影響。提高了事件傳輸過(guò)程的效率, 保證事件傳輸過(guò)程的可靠性,保證事件傳輸過(guò)程的完整性。
【專利附圖】
【附圖說(shuō)明】
[0017] 為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn) 有技術(shù)描述中所需要使用的附圖作一簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是 本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)性的前提下,還 可以根據(jù)這些附圖獲得其他的附圖。
[0018] 圖1為根據(jù)本發(fā)明的傳輸異常事件的處理方法的一個(gè)實(shí)施例的流程圖;
[0019] 圖2為根據(jù)本發(fā)明的傳輸異常事件的處理裝置的一個(gè)實(shí)施例的示意圖。
【具體實(shí)施方式】
[0020] 下面參照附圖對(duì)本發(fā)明進(jìn)行更全面的描述,其中說(shuō)明本發(fā)明的示例性實(shí)施例。下 面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯 然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí) 施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬 于本發(fā)明保護(hù)的范圍。
[0021] 圖1為根據(jù)本發(fā)明的傳輸異常事件的處理方法的一個(gè)實(shí)施例的流程圖。如圖1所 示:
[0022] 步驟101,在傳輸數(shù)據(jù)出現(xiàn)異常時(shí),獲取未成功傳輸?shù)臄?shù)據(jù),其中,將未成功傳輸 的數(shù)據(jù)作為傳輸異常事件。傳輸異常原因包括:TCP連接異常、數(shù)據(jù)庫(kù)連接失敗等等,在數(shù) 據(jù)傳輸中出現(xiàn)的故障。
[0023] 步驟102,判斷異常事件隊(duì)列的長(zhǎng)度是否小于L,L為設(shè)定的異常事件隊(duì)列的最大 長(zhǎng)度。
[0024] 步驟104,當(dāng)異常事件隊(duì)列的長(zhǎng)度等于L時(shí),則將接收的傳輸異常事件寫入臨時(shí)文 件中。如果沒(méi)有臨時(shí)文件,可以新建立臨時(shí)文件。
[0025] 步驟103,當(dāng)異常事件隊(duì)列的長(zhǎng)度小于L時(shí),檢測(cè)存儲(chǔ)介質(zhì)上是否存在存儲(chǔ)傳輸異 常事件的臨時(shí)文件。
[0026] 步驟105,如果不存在臨時(shí)文件時(shí),將則將接收的傳輸異常事件寫入異常事件隊(duì) 列。
[0027] 步驟106,當(dāng)存在臨時(shí)文件時(shí),將臨時(shí)文件中存儲(chǔ)的傳輸異常事件按接收的時(shí)間順 序加入異常事件隊(duì)列中。
[0028] 步驟107,判斷異常事件隊(duì)列的長(zhǎng)度達(dá)到L時(shí)臨時(shí)文件中是否仍有數(shù)據(jù)。
[0029] 步驟108,是,則將接收的傳輸異常事件寫入臨時(shí)文件中。
[0030] 步驟109,如果異常事件隊(duì)列的長(zhǎng)度未達(dá)到L時(shí)臨時(shí)文件已清空,則將接收的傳輸 異常事件寫入異常事件隊(duì)列。
[0031] 按先進(jìn)先出的順序處理異常事件隊(duì)列中的傳輸異常事件,可以實(shí)現(xiàn)基于時(shí)序邏輯 對(duì)傳輸異常進(jìn)行處理。每一個(gè)傳輸異常事件都是個(gè)歷史狀態(tài),對(duì)于后端的分析都是有價(jià)值 的,所以在傳輸異常的情況下,盡量保證保留每一個(gè)到來(lái)的和原有的事件們,在事件量暴增 的情況下,內(nèi)存將有溢出的風(fēng)險(xiǎn)。
[0032] 本發(fā)明的傳輸異常事件的處理方法,通過(guò)設(shè)定臨時(shí)文件,利用內(nèi)存和文件雙重結(jié) 合的方式對(duì)傳輸通訊中異常的數(shù)據(jù)進(jìn)行恢復(fù),加入了緩存機(jī)制保證傳輸?shù)目煽啃裕梢蕴?理更長(zhǎng)的通訊中斷帶來(lái)的功能和性能影響。能夠提高了事件傳輸過(guò)程的效率,并且保證事 件傳輸過(guò)程的可靠性,保證事件傳輸過(guò)程的時(shí)序及完整性。
[0033] 根據(jù)本發(fā)明的一個(gè)實(shí)施例,當(dāng)異常事件隊(duì)列的長(zhǎng)度小于N時(shí),將臨時(shí)文件中存儲(chǔ) 的傳輸異常事件按接收的時(shí)間順序加入異常事件隊(duì)列中,其中,L>N。按先進(jìn)先出的順序處 理異常事件隊(duì)列中的傳輸異常事件,直至異常事件隊(duì)列和臨時(shí)文件都為空。
[0034] 根據(jù)本發(fā)明的一個(gè)實(shí)施例,可以啟動(dòng)線程按先進(jìn)先出的順序處理異常事件隊(duì)列中 的傳輸異常事件。
[0035] 根據(jù)本發(fā)明的一個(gè)實(shí)施例,可以啟動(dòng)線程,接收客戶設(shè)備發(fā)送的消息,并將消息發(fā) 送到上級(jí)或下級(jí)服務(wù)器。
[0036] 消息被正常發(fā)送完成后,將鏈接狀態(tài)參數(shù)的值設(shè)置為正常空閑狀態(tài)。當(dāng)與上級(jí)或 下級(jí)服務(wù)器之間的TCP連接出現(xiàn)異常時(shí),將鏈接狀態(tài)參數(shù)的值設(shè)置為通信故障狀態(tài),并將 客戶設(shè)備發(fā)送的消息作為傳輸異常事件,存儲(chǔ)在異常事件隊(duì)列或臨時(shí)文件中??蛻粼O(shè)備發(fā) 送的消息包括:日志消息、告警消息。
[0037] 根據(jù)本發(fā)明的一個(gè)實(shí)施例,對(duì)于每個(gè)TCP連接將產(chǎn)生一個(gè)Trans類對(duì)象,構(gòu)造函數(shù) 至少包含上級(jí)服務(wù)器地址,使用網(wǎng)際協(xié)議類型;初始化包編號(hào)為0。鏈接狀態(tài)參數(shù)可以是一 個(gè)全局的變量,具有賦值:〇_正??臻e狀態(tài);2 -初始化狀態(tài);3 -正常占用狀態(tài);4 一通信 故障狀態(tài);5-非注冊(cè)狀態(tài)等等。
[0038] 在Trans對(duì)象生成時(shí)通過(guò)傳入的網(wǎng)際協(xié)議類型指定接收、發(fā)送:函數(shù),比如TCP指 定的是read和write或者是recv和send函數(shù)。trans對(duì)象進(jìn)入到正常狀態(tài)后,便可調(diào)用 trans對(duì)象的網(wǎng)絡(luò)接口函數(shù)進(jìn)行收發(fā)。
[0039] 根據(jù)本發(fā)明的一個(gè)實(shí)施例,接收到客戶設(shè)備發(fā)送的消息,獲取鏈接狀態(tài)參數(shù)的值。
[0040] 當(dāng)鏈接狀態(tài)參數(shù)的值為正??臻e狀態(tài)時(shí),將消息發(fā)送到上級(jí)或下級(jí)服務(wù)器。
[0041] 當(dāng)鏈接狀態(tài)參數(shù)的值為通信故障狀態(tài)時(shí),將消息作為傳輸異常事件,檢測(cè)異常事 件隊(duì)列的長(zhǎng)度,具體將消息加入的隊(duì)列為:
[0042] 當(dāng)異常事件隊(duì)列的長(zhǎng)度小于L、并存在臨時(shí)文件時(shí),將臨時(shí)文件中存儲(chǔ)的傳輸異常 事件按接收的時(shí)間順序加入異常事件隊(duì)列中。
[0043] 如果異常事件隊(duì)列的長(zhǎng)度達(dá)到L時(shí)臨時(shí)文件中仍有數(shù)據(jù),則將消息寫入臨時(shí)文件 中。
[0044] 如果異常事件隊(duì)列的長(zhǎng)度未達(dá)到L時(shí)臨時(shí)文件已清空,則將消息寫入異常事件隊(duì) 列。
[0045] 當(dāng)不存在臨時(shí)文件時(shí),將則將消息寫入異常事件隊(duì)列。當(dāng)異常事件隊(duì)列的長(zhǎng)度大 于L時(shí),則將消息寫入臨時(shí)文件中。
[0046] 當(dāng)異常事件隊(duì)列和臨時(shí)文件中都沒(méi)有傳輸異常事件,并且,與上級(jí)或下級(jí)服務(wù)器 之間的TCP連接恢復(fù)正常時(shí),將鏈接狀態(tài)參數(shù)的值設(shè)置為正??臻e狀態(tài)。
[0047] 這樣,當(dāng)出現(xiàn)傳輸異常時(shí),將客戶設(shè)備發(fā)送的消息也加入隊(duì)列或臨時(shí)文件,并且在 將隊(duì)列或臨時(shí)文件中的事件(消息)都處理完后,才進(jìn)行正常的收發(fā),可以保證客戶發(fā)送消 息的時(shí)序和完整。
[0048] 根據(jù)本發(fā)明的一個(gè)實(shí)施例,在處理隊(duì)列或臨時(shí)文件中的事件時(shí),先判斷上級(jí)或下 級(jí)服務(wù)器之間的TCP連接狀態(tài)是否恢復(fù),如果恢復(fù),按先進(jìn)先出的順序處理異常事件隊(duì)列 中的傳輸異常事件,并采用加鎖和解鎖的方式。如果未恢復(fù),則繼續(xù)進(jìn)行TCP協(xié)商。
[0049] 根據(jù)本發(fā)明的一個(gè)實(shí)施例,啟動(dòng)心跳線程,檢測(cè)與上級(jí)或下級(jí)服務(wù)器之間的TCP 連接狀態(tài)。在心跳線程保證了 TCP鏈接的正常狀態(tài)后,便可開(kāi)始正常的處理。
[0050] 啟動(dòng)事件處理線程,用于處理異常事件隊(duì)列中的傳輸異常事件。當(dāng)臨時(shí)文件的大 小超過(guò)閾值,使用GZIP方式對(duì)臨時(shí)文件進(jìn)行壓縮。
[0051] 圖2為根據(jù)本發(fā)明的傳輸異常事件的處理裝置的一個(gè)實(shí)施例的示意圖。如圖所 示,傳輸異常事件的處理裝置21包括:異常事件獲取單元211、異常事件存儲(chǔ)單元212、傳輸 異常事件213。
[0052] 異常事件獲取單元211在傳輸數(shù)據(jù)出現(xiàn)異常時(shí),獲取未成功傳輸?shù)臄?shù)據(jù),其中,所 述未成功傳輸?shù)臄?shù)據(jù)作為傳輸異常事件。異常事件存儲(chǔ)單元212檢測(cè)異常事件隊(duì)列的長(zhǎng) 度,當(dāng)異常事件隊(duì)列的長(zhǎng)度小于L時(shí),檢測(cè)存儲(chǔ)介質(zhì)上是否存在存放傳輸異常事件的臨時(shí) 文件。
[0053] 當(dāng)存在臨時(shí)文件時(shí),異常事件存儲(chǔ)單元212將臨時(shí)文件中存儲(chǔ)的傳輸異常事件按 接收的時(shí)間順序加入異常事件隊(duì)列中。
[0054] 如果異常事件隊(duì)列的長(zhǎng)度達(dá)到L時(shí)臨時(shí)文件中仍有數(shù)據(jù),則異常事件存儲(chǔ)單元 212將獲取的傳輸異常事件寫入臨時(shí)文件中。
[0055] 如果異常事件隊(duì)列的長(zhǎng)度未達(dá)到L時(shí)臨時(shí)文件已清空,則異常事件存儲(chǔ)單元212 將獲取的傳輸異常事件寫入異常事件隊(duì)列。
[0056] 如果不存在臨時(shí)文件,異常事件存儲(chǔ)單元212則將獲取的傳輸異常事件寫入異常 事件隊(duì)列。
[0057] 當(dāng)異常事件隊(duì)列的長(zhǎng)度大于L時(shí),則異常事件存儲(chǔ)單元212將獲取的傳輸異常事 件寫入臨時(shí)文件中。
[0058] 異常事件處理單元213按先進(jìn)先出的順序處理異常事件隊(duì)列中的傳輸異常事件。
[0059] 根據(jù)本發(fā)明的一個(gè)實(shí)施例,當(dāng)異常事件隊(duì)列的長(zhǎng)度小于N時(shí),異常事件處理單元 213將臨時(shí)文件中存儲(chǔ)的傳輸異常事件按接收的時(shí)間順序加入異常事件隊(duì)列中。
[0060] 根據(jù)本發(fā)明的一個(gè)實(shí)施例,消息收發(fā)單元214接收客戶設(shè)備發(fā)送的消息,并將消 息發(fā)送到上級(jí)或下級(jí)服務(wù)器。
[0061] 消息被正常發(fā)送完成后,消息收發(fā)單元214將鏈接狀態(tài)參數(shù)的值設(shè)置為正??臻e 狀態(tài)。
[0062] 當(dāng)與上級(jí)或下級(jí)服務(wù)器之間的TCP連接出現(xiàn)異常時(shí),消息收發(fā)單元214將鏈接狀 態(tài)參數(shù)的值設(shè)置為通信故障狀態(tài),并將客戶設(shè)備發(fā)送的消息作為傳輸異常事件,存儲(chǔ)在異 常事件隊(duì)列或臨時(shí)文件中。
[0063] 根據(jù)本發(fā)明的一個(gè)實(shí)施例,消息收發(fā)單元214接收到客戶設(shè)備發(fā)送的消息,并獲 取鏈接狀態(tài)參數(shù)的值。
[0064] 當(dāng)鏈接狀態(tài)參數(shù)的值為正??臻e狀態(tài)時(shí),消息收發(fā)單元214將消息發(fā)送到上級(jí)或 下級(jí)服務(wù)器。
[0065] 當(dāng)鏈接狀態(tài)參數(shù)的值為通信故障狀態(tài)時(shí),消息收發(fā)單元214將客戶設(shè)備發(fā)送的消 息作為傳輸異常事件,并發(fā)送到異常事件獲取單元211。
[0066] 根據(jù)本發(fā)明的一個(gè)實(shí)施例,消息收發(fā)單元214可以與異常事件獲取單元211共同 監(jiān)控一個(gè)消息隊(duì)列。
[0067] 當(dāng)鏈接狀態(tài)參數(shù)的值為通信故障狀態(tài)時(shí),消息收發(fā)單元214將客戶設(shè)備發(fā)送的消 息作為傳輸異常事件消息,發(fā)送到消息隊(duì)列中,收發(fā)單元214將從此消息隊(duì)列中獲取此消 肩、。
[0068] 異常事件存儲(chǔ)單元212檢測(cè)異常事件隊(duì)列的長(zhǎng)度,當(dāng)異常事件隊(duì)列的長(zhǎng)度小于L、 并存在臨時(shí)文件時(shí),將臨時(shí)文件中存儲(chǔ)的傳輸異常事件按接收的時(shí)間順序加入異常事件隊(duì) 列中。
[0069] 如果異常事件隊(duì)列的長(zhǎng)度達(dá)到L時(shí)臨時(shí)文件中仍有數(shù)據(jù),異常事件存儲(chǔ)單元212 則將消息寫入臨時(shí)文件中。
[0070] 如果異常事件隊(duì)列的長(zhǎng)度未達(dá)到L時(shí)臨時(shí)文件已清空,則異常事件存儲(chǔ)單元212 將消息寫入異常事件隊(duì)列。當(dāng)不存在臨時(shí)文件時(shí),則異常事件存儲(chǔ)單元212將消息寫入異 常事件隊(duì)列。當(dāng)異常事件隊(duì)列的長(zhǎng)度大于L時(shí),則將消息寫入臨時(shí)文件中。
[0071] 當(dāng)異常事件隊(duì)列和臨時(shí)文件中都沒(méi)有傳輸異常事件,并且,與上級(jí)或下級(jí)服務(wù)器 之間的TCP連接回復(fù)正常時(shí),異常事件處理單元213將鏈接狀態(tài)參數(shù)的值設(shè)置為正??臻e 狀態(tài)。
[0072] 根據(jù)本發(fā)明的一個(gè)實(shí)施例,啟動(dòng)心跳線程檢測(cè)與上級(jí)或下級(jí)服務(wù)器之間的TCP連 接狀態(tài)。消息收發(fā)單元214啟動(dòng)事件處理線程處理異常事件隊(duì)列中的傳輸異常事件;當(dāng)臨 時(shí)文件的大小超過(guò)閾值,使用GZIP方式對(duì)所述臨時(shí)文件進(jìn)行壓縮。
[0073] 本發(fā)明的傳輸異常事件的處理方法和裝置,基于時(shí)序邏輯對(duì)傳輸異常進(jìn)行處理, 利用內(nèi)存和文件雙重結(jié)合的方式對(duì)通訊中異常的數(shù)據(jù)進(jìn)行恢復(fù),加入了緩存機(jī)制保證傳輸 的可靠性,可以處理更長(zhǎng)的通訊中斷帶來(lái)的功能和性能影響。提高了事件傳輸過(guò)程的效率, 保證事件傳輸過(guò)程的可靠性,保證事件傳輸過(guò)程的完整性。
[0074] 可能以許多方式來(lái)實(shí)現(xiàn)本發(fā)明的方法和系統(tǒng)。例如,可通過(guò)軟件、硬件、固件或者 軟件、硬件、固件的任何組合來(lái)實(shí)現(xiàn)本發(fā)明的方法和系統(tǒng)。用于方法的步驟的上述順序僅是 為了進(jìn)行說(shuō)明,本發(fā)明的方法的步驟不限于以上具體描述的順序,除非以其它方式特別說(shuō) 明。此外,在一些實(shí)施例中,還可將本發(fā)明實(shí)施為記錄在記錄介質(zhì)中的程序,這些程序包括 用于實(shí)現(xiàn)根據(jù)本發(fā)明的方法的機(jī)器可讀指令。因而,本發(fā)明還覆蓋存儲(chǔ)用于執(zhí)行根據(jù)本發(fā) 明的方法的程序的記錄介質(zhì)。
[0075] 本發(fā)明的描述是為了示例和描述起見(jiàn)而給出的,而并不是無(wú)遺漏的或者將本發(fā)明 限于所公開(kāi)的形式。很多修改和變化對(duì)于本領(lǐng)域的普通技術(shù)人員而言是顯然的。選擇和描 述實(shí)施例是為了更好說(shuō)明本發(fā)明的原理和實(shí)際應(yīng)用,并且使本領(lǐng)域的普通技術(shù)人員能夠理 解本發(fā)明從而設(shè)計(jì)適于特定用途的帶有各種修改的各種實(shí)施例。
【權(quán)利要求】
1. 一種傳輸異常事件的處理方法,其特征在于,包括: 在傳輸數(shù)據(jù)出現(xiàn)異常時(shí),獲取未成功傳輸?shù)臄?shù)據(jù),其中,所述未成功傳輸?shù)臄?shù)據(jù)作為 傳輸異常事件; 檢測(cè)異常事件隊(duì)列的長(zhǎng)度,當(dāng)所述異常事件隊(duì)列的長(zhǎng)度小于L時(shí),檢測(cè)存儲(chǔ)介質(zhì)上是 否存在存儲(chǔ)傳輸異常事件的臨時(shí)文件; 其中,當(dāng)存在所述臨時(shí)文件時(shí),將所述臨時(shí)文件中存儲(chǔ)的傳輸異常事件按接收的時(shí)間 順序加入所述異常事件隊(duì)列中;如果所述異常事件隊(duì)列的長(zhǎng)度達(dá)到L時(shí)所述臨時(shí)文件中仍 有數(shù)據(jù),則將獲取的傳輸異常事件寫入所述臨時(shí)文件中;如果所述異常事件隊(duì)列的長(zhǎng)度未 達(dá)到L時(shí)所述臨時(shí)文件已清空,則將獲取的傳輸異常事件寫入所述異常事件隊(duì)列;如果不 存在所述臨時(shí)文件時(shí),將則將獲取的傳輸異常事件寫入所述異常事件隊(duì)列; 當(dāng)所述異常事件隊(duì)列的長(zhǎng)度大于或等于L時(shí),則將獲取的傳輸異常事件寫入所述臨時(shí) 文件中; 按先進(jìn)先出的順序處理所述異常事件隊(duì)列中的傳輸異常事件; 其中,L為設(shè)定的所述異常事件隊(duì)列的最大長(zhǎng)度,傳輸異常原因包括:TCP連接異常、數(shù) 據(jù)庫(kù)連接失敗。
2. 如權(quán)利要求1所述的方法,其特征在于: 當(dāng)所述異常事件隊(duì)列的長(zhǎng)度小于N時(shí),將所述臨時(shí)文件中存儲(chǔ)的傳輸異常事件按接收 的時(shí)間順序加入所述異常事件隊(duì)列中,其中,L>N。
3. 如權(quán)利要求1所述的方法,其特征在于: 接收客戶設(shè)備發(fā)送的消息,并將所述消息發(fā)送到上級(jí)或下級(jí)服務(wù)器; 所述消息被正常發(fā)送完成后,將鏈接狀態(tài)參數(shù)的值設(shè)置為正常空閑狀態(tài); 當(dāng)與上級(jí)或下級(jí)服務(wù)器之間的TCP連接出現(xiàn)異常時(shí),將所述鏈接狀態(tài)參數(shù)的值設(shè)置為 通信故障狀態(tài),并將客戶設(shè)備發(fā)送的消息作為傳輸異常事件,存儲(chǔ)在所述異常事件隊(duì)列或 臨時(shí)文件中; 所述客戶設(shè)備發(fā)送的消息包括:日志消息、告警消息。
4. 如權(quán)利要求3所述的方法,其特征在于: 接收到客戶設(shè)備發(fā)送的消息,獲取所述鏈接狀態(tài)參數(shù)的值; 當(dāng)所述鏈接狀態(tài)參數(shù)的值為正??臻e狀態(tài)時(shí),將所述消息發(fā)送到上級(jí)或下級(jí)服務(wù)器; 當(dāng)所述鏈接狀態(tài)參數(shù)的值為通信故障狀態(tài)時(shí),將所述消息作為傳輸異常事件,檢測(cè)所 述異常事件隊(duì)列的長(zhǎng)度,當(dāng)所述異常事件隊(duì)列的長(zhǎng)度小于L、并存在所述臨時(shí)文件時(shí),將所 述臨時(shí)文件中存儲(chǔ)的傳輸異常事件按接收的時(shí)間順序加入所述異常事件隊(duì)列中;如果所述 異常事件隊(duì)列的長(zhǎng)度達(dá)到L時(shí)所述臨時(shí)文件中仍有數(shù)據(jù),則將所述消息寫入所述臨時(shí)文件 中;如果所述異常事件隊(duì)列的長(zhǎng)度未達(dá)到L時(shí)所述臨時(shí)文件已清空,則將所述消息寫入所 述異常事件隊(duì)列;當(dāng)不存在所述臨時(shí)文件時(shí),將則將所述消息寫入所述異常事件隊(duì)列; 當(dāng)所述異常事件隊(duì)列的長(zhǎng)度大于L時(shí),則將所述消息寫入所述臨時(shí)文件中; 其中,當(dāng)所述異常事件隊(duì)列和所述臨時(shí)文件中都沒(méi)有傳輸異常事件,并且,與上級(jí)或下 級(jí)服務(wù)器之間的TCP連接恢復(fù)正常時(shí),將所述鏈接狀態(tài)參數(shù)的值設(shè)置為正??臻e狀態(tài)。
5. 如權(quán)利要求4所述的方法,其特征在于: 啟動(dòng)心跳線程,用于檢測(cè)與上級(jí)或下級(jí)服務(wù)器之間的TCP連接狀態(tài); 啟動(dòng)事件處理線程,用于處理所述異常事件隊(duì)列中的傳輸異常事件; 當(dāng)所述臨時(shí)文件的大小超過(guò)閾值,使用GZIP方式對(duì)所述臨時(shí)文件進(jìn)行壓縮。
6. -種傳輸異常事件的處理裝置,其特征在于,包括: 異常事件獲取單元,用于在傳輸數(shù)據(jù)出現(xiàn)異常時(shí),獲取未成功傳輸?shù)臄?shù)據(jù),其中,所述 未成功傳輸?shù)臄?shù)據(jù)作為傳輸異常事件; 異常事件存儲(chǔ)單元,用于檢測(cè)異常事件隊(duì)列的長(zhǎng)度;當(dāng)所述異常事件隊(duì)列的長(zhǎng)度小于 L時(shí),檢測(cè)存儲(chǔ)介質(zhì)上是否存在存放傳輸異常事件的臨時(shí)文件;當(dāng)存在所述臨時(shí)文件時(shí),將 所述臨時(shí)文件中存儲(chǔ)的傳輸異常事件按接收的時(shí)間順序加入所述異常事件隊(duì)列中;如果所 述異常事件隊(duì)列的長(zhǎng)度達(dá)到L時(shí)所述臨時(shí)文件中仍有數(shù)據(jù),則將獲取的傳輸異常事件寫入 所述臨時(shí)文件中;如果所述異常事件隊(duì)列的長(zhǎng)度未達(dá)到L時(shí)所述臨時(shí)文件已清空,則將獲 取的傳輸異常事件寫入所述異常事件隊(duì)列;如果不存在所述臨時(shí)文件,將則將獲取的傳輸 異常事件寫入所述異常事件隊(duì)列;當(dāng)所述異常事件隊(duì)列的長(zhǎng)度大于L時(shí),則將獲取的傳輸 異常事件寫入所述臨時(shí)文件中; 異常事件處理單元,用于按先進(jìn)先出的順序處理所述異常事件隊(duì)列中的傳輸異常事 件; 其中,L為設(shè)定的所述異常事件隊(duì)列的最大長(zhǎng)度,傳輸異常原因包括:TCP連接異常、數(shù) 據(jù)庫(kù)連接失敗。
7. 如權(quán)利要求6所述的裝置,其特征在于: 當(dāng)所述異常事件隊(duì)列的長(zhǎng)度小于N時(shí),所述異常事件處理單元將所述臨時(shí)文件中存儲(chǔ) 的傳輸異常事件按接收的時(shí)間順序加入所述異常事件隊(duì)列中。
8. 如權(quán)利要求7所述的裝置,其特征在于: 消息收發(fā)單元,用于接收客戶設(shè)備發(fā)送的消息,并將所述消息發(fā)送到上級(jí)或下級(jí)服務(wù) 器;所述消息被正常發(fā)送完成后,將鏈接狀態(tài)參數(shù)的值設(shè)置為正??臻e狀態(tài); 當(dāng)與上級(jí)或下級(jí)服務(wù)器之間的TCP連接出現(xiàn)異常時(shí),所述消息收發(fā)單元將所述鏈接狀 態(tài)參數(shù)的值設(shè)置為通信故障狀態(tài),并將客戶設(shè)備發(fā)送的消息作為傳輸異常事件,存儲(chǔ)在所 述異常事件隊(duì)列或臨時(shí)文件中; 所述客戶設(shè)備發(fā)送的消息包括:日志消息、告警消息。
9. 如權(quán)利要求8所述的裝置,其特征在于: 所述消息收發(fā)單元接收到客戶設(shè)備發(fā)送的消息,并獲取所述鏈接狀態(tài)參數(shù)的值; 當(dāng)所述鏈接狀態(tài)參數(shù)的值為正??臻e狀態(tài)時(shí),所述消息收發(fā)單元將所述消息發(fā)送到上 級(jí)或下級(jí)服務(wù)器; 當(dāng)所述鏈接狀態(tài)參數(shù)的值為通信故障狀態(tài)時(shí),所述消息收發(fā)單元將客戶設(shè)備發(fā)送的消 息作為傳輸異常事件,并發(fā)送到所述異常事件獲取單元; 所述異常事件存儲(chǔ)單元檢測(cè)所述異常事件隊(duì)列的長(zhǎng)度,當(dāng)所述異常事件隊(duì)列的長(zhǎng)度小 于L、并存在所述臨時(shí)文件時(shí),將所述臨時(shí)文件中存儲(chǔ)的傳輸異常事件按接收的時(shí)間順序 加入所述異常事件隊(duì)列中;如果所述異常事件隊(duì)列的長(zhǎng)度達(dá)到L時(shí)所述臨時(shí)文件中仍有數(shù) 據(jù),所述異常事件存儲(chǔ)單元?jiǎng)t將所述消息寫入所述臨時(shí)文件中;如果所述異常事件隊(duì)列的 長(zhǎng)度未達(dá)到L時(shí)所述臨時(shí)文件已清空,則所述異常事件存儲(chǔ)單元將所述消息寫入所述異常 事件隊(duì)列;當(dāng)不存在所述臨時(shí)文件時(shí),則所述異常事件存儲(chǔ)單元將所述消息寫入所述異常 事件隊(duì)列; 當(dāng)所述異常事件隊(duì)列的長(zhǎng)度大于L時(shí),則將所述消息寫入所述臨時(shí)文件中; 其中,當(dāng)所述異常事件隊(duì)列和臨時(shí)文件中都沒(méi)有傳輸異常事件,并且,與上級(jí)或下級(jí)服 務(wù)器之間的TCP連接回復(fù)正常時(shí),所述異常事件處理單元將鏈接狀態(tài)參數(shù)的值設(shè)置為正常 空閑狀態(tài)。
10.如權(quán)利要求9所述的裝置,其特征在于: 心跳單元啟動(dòng)心跳線程,用于檢測(cè)與上級(jí)或下級(jí)服務(wù)器之間的TCP連接狀態(tài); 所述消息收發(fā)單元啟動(dòng)事件處理線程,用于處理所述異常事件隊(duì)列中的傳輸異常事 件; 當(dāng)所述臨時(shí)文件的大小超過(guò)閾值,使用GZIP方式對(duì)所述臨時(shí)文件進(jìn)行壓縮。
【文檔編號(hào)】H04L29/08GK104219259SQ201310208044
【公開(kāi)日】2014年12月17日 申請(qǐng)日期:2013年5月30日 優(yōu)先權(quán)日:2013年5月30日
【發(fā)明者】唐維, 章軍, 李文宇, 馮曉東, 賈海燕, 田朝文, 張鑒, 常力元, 趙洪波, 趙敬謙, 俞韶楨 申請(qǐng)人:中國(guó)電信股份有限公司