本發(fā)明涉及計算機(jī)應(yīng)用技術(shù)領(lǐng)域,特別是涉及一種消息處理方法及裝置。
背景技術(shù):
在計算機(jī)系統(tǒng)中,客戶端和服務(wù)器之間總會進(jìn)行一些消息的傳輸,客戶端可以向服務(wù)器發(fā)送請求消息,請求消息進(jìn)入消息隊列,服務(wù)器通過服務(wù)進(jìn)程按照先進(jìn)先出的策略,依次從消息隊列中取出請求消息,并對請求消息進(jìn)行處理,返回相應(yīng)的應(yīng)答消息。
當(dāng)因為服務(wù)器設(shè)備突發(fā)的磁盤IO或CPU高耗、數(shù)據(jù)庫服務(wù)能力抖動等原因造成服務(wù)進(jìn)程的服務(wù)能力無法及時處理完客戶端的請求消息時,會導(dǎo)致客戶端進(jìn)行超時重試,重復(fù)發(fā)送請求消息,進(jìn)一步加大服務(wù)進(jìn)程的壓力,導(dǎo)致請求消息的大量積壓,而當(dāng)客戶端在設(shè)定的時長內(nèi)仍未接收到應(yīng)答消息時,認(rèn)為消息超時,將不再等待該應(yīng)答消息。
但是,這些請求消息還存在于消息隊列中,服務(wù)進(jìn)程仍然在對其進(jìn)行處理,導(dǎo)致服務(wù)進(jìn)程一直處理的可能都是目前已經(jīng)超時的請求消息,客戶端已經(jīng)不再等待相應(yīng)的應(yīng)答消息,而其他需要及時處理的請求消息并未得到處理。積壓的請求消息需要服務(wù)進(jìn)程較長時間才能處理完,從而導(dǎo)致服務(wù)進(jìn)程處于較長時間的不可用狀態(tài)。
技術(shù)實現(xiàn)要素:
為解決上述技術(shù)問題,本發(fā)明提供一種消息處理方法及裝置。
一種消息處理方法,包括:
在第一時刻,讀取消息隊列中的第一請求消息,所述第一請求消息中攜帶所述第一請求消息加入到所述消息隊列中的第二時刻的信息;
根據(jù)所述第一時刻及所述第二時刻,確定所述第一請求消息是否為超時消息;
如果是,則對所述第一請求消息做丟棄處理。
在本發(fā)明的一種具體實施方式中,在所述在第一時刻,讀取消息隊列中的第一請求消息之前,所述方法還包括:
在第二時刻,接收客戶端發(fā)送的第二請求消息;
在所述第二請求消息中添加所述第二時刻的信息,生成第一請求消息;
將所述第一請求消息加入到所述消息隊列中。
在本發(fā)明的一種具體實施方式中,所述在所述第二請求消息中添加所述第二時刻的信息,生成第一請求消息,包括:
在所述第二請求消息的預(yù)設(shè)位置處進(jìn)行擴(kuò)展,獲得擴(kuò)展區(qū)域,所述擴(kuò)展區(qū)域的大小為預(yù)設(shè)字節(jié)數(shù);
在所述擴(kuò)展區(qū)域中添加所述第二時刻的信息,生成第一請求消息。
在本發(fā)明的一種具體實施方式中,所述根據(jù)所述第一時刻及所述第二時刻,確定所述第一請求消息是否為超時消息,包括:
根據(jù)所述第一時刻及所述第二時刻,確定所述第一請求消息在所述消息隊列中的等待時長;
判斷所述等待時長是否大于預(yù)設(shè)的超時等待時長閾值;
如果是,則確定所述第一請求消息為超時消息。
在本發(fā)明的一種具體實施方式中,所述預(yù)設(shè)的超時等待時長為所述客戶端的超時等待時長。
一種消息處理裝置,包括:
請求消息讀取模塊,用于在第一時刻,讀取消息隊列中的第一請求消息,所述第一請求消息中攜帶所述第一請求消息加入到所述消息隊列中的第二時刻的信息;
超時消息確定模塊,用于根據(jù)所述第一時刻及所述第二時刻,確定所述第一請求消息是否為超時消息,如果是,則觸發(fā)請求消息丟棄模塊;
所述請求消息丟棄模塊,用于對所述第一請求消息做丟棄處理。
在本發(fā)明的一種具體實施方式中,所述裝置還包括:
請求消息接收模塊,用于在第二時刻,接收客戶端發(fā)送的第二請求消息;
請求消息生成模塊,用于在所述第二請求消息中添加所述第二時刻的信息,生成第一請求消息;
請求消息入隊列模塊,用于將所述第一請求消息加入到所述消息隊列中。
在本發(fā)明的一種具體實施方式中,所述請求消息生成模塊,具體用于:
在所述第二請求消息的預(yù)設(shè)位置處進(jìn)行擴(kuò)展,獲得擴(kuò)展區(qū)域,所述擴(kuò)展區(qū)域的大小為預(yù)設(shè)字節(jié)數(shù);
在所述擴(kuò)展區(qū)域中添加所述第二時刻的信息,生成第一請求消息。
在本發(fā)明的一種具體實施方式中,所述超時消息確定模塊,具體用于:
根據(jù)所述第一時刻及所述第二時刻,確定所述第一請求消息在所述消息隊列中的等待時長;
判斷所述等待時長是否大于預(yù)設(shè)的超時等待時長閾值;
如果是,則確定所述第一請求消息為超時消息。
在本發(fā)明的一種具體實施方式中,所述預(yù)設(shè)的超時等待時長為所述客戶端的超時等待時長。
應(yīng)用本發(fā)明實施例所提供的技術(shù)方案,消息隊列的第一請求消息中攜帶有該第一請求消息加入到消息隊列的第二時刻的信息,在第一時刻,讀取到該第一請求消息時,可以根據(jù)該第一時刻及第二時刻,確定該第一請求消息是否為超時消息,如果是,則對該第一請求消息做丟棄處理。這樣,使得服務(wù)進(jìn)程能夠及時對未超時的請求消息進(jìn)行處理,使服務(wù)一直處于可用狀態(tài),當(dāng)抖動平穩(wěn)時,可以快速處理完消息隊列中積壓的請求消息,快速恢復(fù)整個系統(tǒng)的服務(wù)能力。
附圖說明
為了更清楚的說明本發(fā)明實施例或現(xiàn)有技術(shù)的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單的介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明實施例中消息處理方法的一種實施流程圖;
圖2為本發(fā)明實施例中消息處理方法的另一種實施流程圖;
圖3為本發(fā)明實施例中請求消息擴(kuò)展示意圖;
圖4為本發(fā)明實施例中消息處理裝置的一種結(jié)構(gòu)示意圖;
圖5為本發(fā)明實施例中消息處理裝置的另一種結(jié)構(gòu)示意圖。
具體實施方式
為了使本技術(shù)領(lǐng)域的人員更好地理解本發(fā)明方案,下面結(jié)合附圖和具體實施方式對本發(fā)明作進(jìn)一步的詳細(xì)說明。顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護(hù)的范圍。
參見圖1所示,為本發(fā)明實施例所提供的一種消息處理方法的實施流程圖,該方法可以包括以下步驟:
S110:在第一時刻,讀取消息隊列中的第一請求消息。
其中,第一請求消息中攜帶第一請求消息加入到消息隊列中的第二時刻的信息。
在本發(fā)明實施例中,服務(wù)器的服務(wù)進(jìn)程用于處理客戶端的請求消息,可以包括多種線程,如消息接收線程、處理線程等,不同的線程在實際工作中發(fā)揮不同的作用。當(dāng)接收到客戶端發(fā)送的請求消息時,可以由服務(wù)進(jìn)程的消息接收線程將相應(yīng)的請求消息加入到消息隊列中,并由處理線程按順序讀取消息隊列中的請求消息,并對其進(jìn)行處理,如通過查詢數(shù)據(jù)庫、緩存并進(jìn)行相關(guān)計算得到客戶端想要的結(jié)果,并將結(jié)果返回給客戶端。
在第一時刻,服務(wù)進(jìn)程的處理線程可以讀取消息隊列中的第一請求消息,該第一請求消息中攜帶第一請求消息加入到消息隊列中的第二時刻的信息。該第二時刻的信息可以是客戶端在生成第一請求消息時添加在第一請求消息中的,還可以是服務(wù)進(jìn)程的消息接收線程在接收到客戶端發(fā)送的請求消息后添加的,添加第二時刻的信息后的請求消息即為第一請求消息。
該第一時刻即為該第一請求消息的出隊列時刻,該第二時刻即為該第一請求消息的入隊列時刻。
S120:根據(jù)第一時刻及第二時刻,確定第一請求消息是否為超時消息。
在第一時刻,讀取到消息隊列中的第一請求消息,該第一時刻即為該第一請求消息的出隊列時刻。第一請求消息中攜帶其加入到消息隊列中的第二時刻的信息,該第二時刻即為該第一請求消息的入隊列時刻。在讀取到的第一請求消息中,可以提取出該第二時刻的信息。
根據(jù)第一時刻及第二時刻,可以確定該第一請求消息是否為超時消息。如果是,則繼續(xù)執(zhí)行步驟S130的操作,否則,按照正常的處理規(guī)則對該第一請求消息進(jìn)行處理及響應(yīng)。
在本發(fā)明的一種具體實施方式中,步驟S120可以包括以下步驟:
步驟一:根據(jù)第一時刻及第二時刻,確定第一請求消息在消息隊列中的等待時長;
步驟二:判斷等待時長是否大于預(yù)設(shè)的超時等待時長閾值,如果是,則可以確定該第一請求消息為超時消息,否則,可以確定該第一請求消息非超時消息。
為便于描述,將上述兩個步驟結(jié)合起來進(jìn)行說明。
在實際應(yīng)用中,客戶端向服務(wù)器發(fā)送一個請求消息,如果在設(shè)定時長內(nèi)未接收到服務(wù)器的應(yīng)答消息,則客戶端將不再等待服務(wù)器的應(yīng)答消息,可以進(jìn)行超時重試,重新發(fā)送該請求消息。該設(shè)定時長即為客戶端的超時等待時長,具體可以設(shè)定為3秒-5秒。
在本發(fā)明實施例中,可以預(yù)先設(shè)定一個超時等待時長閾值,如果某個請求消息在消息隊列中的等待時長大于該超時等待時長閾值,則可以確定該請求消息為超時消息,否則該請求消息非超時消息。
具體的,可以根據(jù)客戶端的超時等待時長設(shè)定該超時等待時長閾值。具體的,該超時等待時長閾值可以與客戶端的超時等待時長相等,或者小于客戶端的超時等待時長。
根據(jù)第一時刻及第二時刻,可以確定該第一請求消息在消息隊列中的等待時長。
判斷該等待時長是否大于預(yù)設(shè)的超時等待時長閾值,如果是,則可以確定該第一請求消息為超時消息,否則,確定該第一請求消息未超時。
S130:對第一請求消息做丟棄處理。
當(dāng)?shù)谝徽埱笙槌瑫r消息時,表明客戶端已經(jīng)不再等待該第一請求消息的應(yīng)答消息,服務(wù)進(jìn)程沒有必要再對該第一請求消息進(jìn)行計算等處理,可以直接對該第一請求消息做丟棄處理,以便盡快處理消息隊列中的其他請求消息。
應(yīng)用本發(fā)明實施例所提供的方法,消息隊列的第一請求消息中攜帶有該第一請求消息加入到消息隊列的第二時刻的信息,在第一時刻,讀取到該第一請求消息時,可以根據(jù)該第一時刻及第二時刻,確定該第一請求消息是否為超時消息,如果是,則對該第一請求消息做丟棄處理。這樣,使得服務(wù)進(jìn)程能夠及時對未超時的請求消息進(jìn)行處理,使服務(wù)一直處于可用狀態(tài),當(dāng)抖動平穩(wěn)時,可以快速處理完消息隊列中積壓的請求消息,快速恢復(fù)整個系統(tǒng)的服務(wù)能力。
參見圖2所示,在本發(fā)明的一個實施例中,在步驟S110之前,該方法還可以包括以下步驟:
S210:在第二時刻,接收客戶端發(fā)送的第二請求消息;
S220:在第二請求消息中添加第二時刻的信息,生成第一請求消息;
S230:將第一請求消息加入到消息隊列中。
為便于描述,將上述三個步驟結(jié)合起來進(jìn)行說明。
在本發(fā)明實施例中,服務(wù)進(jìn)程可以通過消息接收線程接收客戶端發(fā)送的第二請求消息。接收到該第二請求消息后,即可對該第二請求消息進(jìn)行相應(yīng)處理,然后將處理后的請求消息加入到消息隊列中,該第二時刻即可作為該處理后的請求消息的入隊列時刻。
接收到客戶端發(fā)送的第二請求消息后,可以在第二請求消息中添加第二時刻的信息,并將其重新封裝生成第一請求消息。
具體的,可以在第二請求消息的預(yù)設(shè)位置處進(jìn)行擴(kuò)展,獲得擴(kuò)展區(qū)域,該擴(kuò)展區(qū)域的大小為預(yù)設(shè)字節(jié)數(shù);在擴(kuò)展區(qū)域中添加第二時刻的信息,生成第一請求消息。
將第一請求消息加入到消息隊列中。
比如,如圖3所示,可以在第二請求消息的消息包后面擴(kuò)展4個字節(jié),表示為入隊列前的系統(tǒng)時刻,即第二時刻,并進(jìn)行賦值,重新封裝為第一請求消息,第一請求消息包括第二請求消息及擴(kuò)展區(qū)域,然后將第一請求消息加入到消息隊列中。
相應(yīng)的,在第一時刻,在消息隊列中讀取第一請求消息時,可以通過第一請求消息的消息包的最后4個字節(jié)得到該第一請求消息的入隊列時刻,即第二時刻,根據(jù)第一時刻及第二時刻,可以確定該第一請求消息是否為超時消息,如果是,則對該第一請求消息進(jìn)行丟棄處理。
相應(yīng)于上面的方法實施例,本發(fā)明實施例還提供了一種消息處理裝置。下文描述的消息處理裝置與上文描述的消息處理方法可相互對應(yīng)參照。
參見圖4所示,該裝置可以包括以下模塊:
請求消息讀取模塊410,用于在第一時刻,讀取消息隊列中的第一請求消息,第一請求消息中攜帶第一請求消息加入到消息隊列中的第二時刻的信息;
超時消息確定模塊420,用于根據(jù)第一時刻及第二時刻,確定第一請求消息是否為超時消息,如果是,則觸發(fā)請求消息丟棄模塊430;
請求消息丟棄模塊430,用于對第一請求消息做丟棄處理。
應(yīng)用本發(fā)明實施例所提供的裝置,消息隊列的第一請求消息中攜帶有該第一請求消息加入到消息隊列的第二時刻的信息,在第一時刻,讀取到該第一請求消息時,可以根據(jù)該第一時刻及第二時刻,確定該第一請求消息是否為超時消息,如果是,則對該第一請求消息做丟棄處理。這樣,使得服務(wù)進(jìn)程能夠及時對未超時的請求消息進(jìn)行處理,使服務(wù)一直處于可用狀態(tài),當(dāng)抖動平穩(wěn)時,可以快速處理完消息隊列中積壓的請求消息,快速恢復(fù)整個系統(tǒng)的服務(wù)能力。
參見圖5所示,在本發(fā)明的一個實施例中,該裝置還可以包括:
請求消息接收模塊510,用于在第二時刻,接收客戶端發(fā)送的第二請求消息;
請求消息生成模塊520,用于在第二請求消息中添加第二時刻的信息,生成第一請求消息;
請求消息入隊列模塊530,用于將第一請求消息加入到消息隊列中。
在本發(fā)明的一種具體實施方式中,請求消息生成模塊520,具體用于:
在第二請求消息的預(yù)設(shè)位置處進(jìn)行擴(kuò)展,獲得擴(kuò)展區(qū)域,擴(kuò)展區(qū)域的大小為預(yù)設(shè)字節(jié)數(shù);
在擴(kuò)展區(qū)域中添加第二時刻的信息,生成第一請求消息。
在本發(fā)明的一種具體實施方式中,超時消息確定模塊420,具體用于:
根據(jù)第一時刻及第二時刻,確定第一請求消息在消息隊列中的等待時長;
判斷等待時長是否大于預(yù)設(shè)的超時等待時長閾值;
如果是,則確定第一請求消息為超時消息。
在本發(fā)明的一種具體實施方式中,預(yù)設(shè)的超時等待時長為客戶端的超時等待時長。
本說明書中各個實施例采用遞進(jìn)的方式描述,每個實施例重點說明的都是與其它實施例的不同之處,各個實施例之間相同或相似部分互相參見即可。對于實施例公開的裝置而言,由于其與實施例公開的方法相對應(yīng),所以描述的比較簡單,相關(guān)之處參見方法部分說明即可。
專業(yè)人員還可以進(jìn)一步意識到,結(jié)合本文中所公開的實施例描述的各示例的單元及算法步驟,能夠以電子硬件、計算機(jī)軟件或者二者的結(jié)合來實現(xiàn),為了清楚地說明硬件和軟件的可互換性,在上述說明中已經(jīng)按照功能一般性地描述了各示例的組成及步驟。這些功能究竟以硬件還是軟件方式來執(zhí)行,取決于技術(shù)方案的特定應(yīng)用和設(shè)計約束條件。專業(yè)技術(shù)人員可以對每個特定的應(yīng)用來使用不同方法來實現(xiàn)所描述的功能,但是這種實現(xiàn)不應(yīng)認(rèn)為超出本發(fā)明的范圍。
結(jié)合本文中所公開的實施例描述的方法或算法的步驟可以直接用硬件、處理器執(zhí)行的軟件模塊,或者二者的結(jié)合來實施。軟件模塊可以置于隨機(jī)存儲器(RAM)、內(nèi)存、只讀存儲器(ROM)、電可編程ROM、電可擦除可編程ROM、寄存器、硬盤、可移動磁盤、CD-ROM、或技術(shù)領(lǐng)域內(nèi)所公知的任意其它形式的存儲介質(zhì)中。
以上對本發(fā)明所提供的一種消息處理方法及裝置進(jìn)行了詳細(xì)介紹。本文中應(yīng)用了具體個例對本發(fā)明的原理及實施方式進(jìn)行了闡述,以上實施例的說明只是用于幫助理解本發(fā)明的方法及其核心思想。應(yīng)當(dāng)指出,對于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以對本發(fā)明進(jìn)行若干改進(jìn)和修飾,這些改進(jìn)和修飾也落入本發(fā)明權(quán)利要求的保護(hù)范圍內(nèi)。