本發(fā)明實(shí)施例涉及通信技術(shù)領(lǐng)域,尤其涉及一種消息處理方法及設(shè)備。
背景技術(shù):
目前,應(yīng)用程序中的功能項(xiàng)越來(lái)越多,很多功能項(xiàng)對(duì)應(yīng)的數(shù)據(jù)依賴于第三方服務(wù)器中的數(shù)據(jù)。例如,應(yīng)用程序1中包括紅包功能項(xiàng),紅包功能項(xiàng)中的紅包數(shù)據(jù)可以來(lái)自打車服務(wù)器、外賣服務(wù)器等。
在實(shí)際應(yīng)用過(guò)程中,終端設(shè)備可以向應(yīng)用服務(wù)器請(qǐng)求應(yīng)用程序中的數(shù)據(jù),當(dāng)終端設(shè)備向應(yīng)用服務(wù)器請(qǐng)求應(yīng)用程序中依賴第三方服務(wù)器的功能項(xiàng)(下文簡(jiǎn)稱依賴項(xiàng))對(duì)應(yīng)的數(shù)據(jù)時(shí),應(yīng)用服務(wù)器需要向第三方服務(wù)器請(qǐng)求獲取相應(yīng)的數(shù)據(jù)。在現(xiàn)有技術(shù)中,當(dāng)依賴項(xiàng)所依賴的一個(gè)或多個(gè)服務(wù)器出現(xiàn)故障時(shí),應(yīng)用服務(wù)器無(wú)法正常向第三方服務(wù)器獲取數(shù)據(jù),則應(yīng)用服務(wù)器會(huì)頻繁的向第三方服務(wù)器發(fā)送數(shù)據(jù)請(qǐng)求,進(jìn)而可能引起應(yīng)用服務(wù)器由于負(fù)載過(guò)大而導(dǎo)致的宕機(jī),導(dǎo)致應(yīng)用服務(wù)器對(duì)消息處理的可靠性較低。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明實(shí)施例提供一種消息處理方法及設(shè)備,提高了應(yīng)用服務(wù)器對(duì)消息處理的可靠性。
第一方面,本發(fā)明實(shí)施例提供一種消息處理方法,應(yīng)用于應(yīng)用服務(wù)器包括:
獲取在預(yù)設(shè)時(shí)段內(nèi)對(duì)線程池中的依賴消息處理請(qǐng)求進(jìn)行處理的成功率,所述依賴消息處理請(qǐng)求為所述應(yīng)用服務(wù)器依賴第三方服務(wù)器處理的請(qǐng)求;
若所述成功率大于預(yù)設(shè)成功率,則同時(shí)對(duì)所述線程池中所有的依賴消息處理請(qǐng)求進(jìn)行處理;
若所述成功率小于預(yù)設(shè)成功率,則同時(shí)對(duì)所述線程池中、預(yù)設(shè)個(gè)數(shù)的依賴消息處理請(qǐng)求進(jìn)行處理,所述預(yù)設(shè)個(gè)數(shù)小于所述線程池最多可容納的依賴消息處理請(qǐng)求的個(gè)數(shù)。
在一種可能的實(shí)施方式中,獲取在預(yù)設(shè)時(shí)段內(nèi)對(duì)線程池中的依賴消息處理請(qǐng)求進(jìn)行處理的成功率,包括:
獲取在所述預(yù)設(shè)時(shí)段內(nèi)、根據(jù)所述線程池中的依賴消息處理請(qǐng)求向所述第三方服務(wù)器發(fā)送的請(qǐng)求消息的第一個(gè)數(shù);
獲取在所述預(yù)設(shè)時(shí)段內(nèi)接收到所述第三服務(wù)器發(fā)送的、與所述請(qǐng)求消息對(duì)應(yīng)的成功響應(yīng)消息的第二個(gè)數(shù);
根據(jù)所述第一個(gè)數(shù)和所述第二個(gè)數(shù),確定所述成功率。
在另一種可能的實(shí)施方式中,同時(shí)對(duì)所述線程池中、預(yù)設(shè)個(gè)數(shù)的依賴消息處理請(qǐng)求進(jìn)行處理,包括:
按照所述線程池中各依賴消息處理請(qǐng)求的接收時(shí)間,確定所述預(yù)設(shè)個(gè)數(shù)個(gè)依賴消息處理請(qǐng)求;
同時(shí)對(duì)所述預(yù)設(shè)個(gè)數(shù)個(gè)依賴消息處理請(qǐng)求進(jìn)行處理。
在另一種可能的實(shí)施方式中,所述方法還包括:
接收終端設(shè)備發(fā)送的第一依賴消息處理請(qǐng)求;
判斷所述線程池中的請(qǐng)求個(gè)數(shù)是否小于預(yù)設(shè)閾值;
若是,則將所述第一依賴消息處理請(qǐng)求存放到所述線程池;
若否,則將所述第一依賴消息處理請(qǐng)求暫存在待處理請(qǐng)求隊(duì)列,并獲取所述線程池中包括的請(qǐng)求的個(gè)數(shù)及所述依賴消息處理請(qǐng)求在所述待處理請(qǐng)求隊(duì)列中的位置,直至所述線程池中的請(qǐng)求的個(gè)數(shù)小于預(yù)設(shè)閾值、且所述依賴消息處理請(qǐng)求位于所述待處理請(qǐng)求隊(duì)列的隊(duì)首時(shí),將所述第一依賴消息處理請(qǐng)求存儲(chǔ)到所述線程池。
在另一種可能的實(shí)施方式中,所述方法還包括:
在所述線程池中確定處理完成的依賴消息處理請(qǐng)求;
將所述處理完成的依賴消息處理請(qǐng)求移出所述線程池;
若所述待處理請(qǐng)求隊(duì)列中存在依賴消息處理請(qǐng)求,則將位于待處理請(qǐng)求隊(duì)列隊(duì)首的依賴消息處理請(qǐng)求存儲(chǔ)到所述線程池。
第二方面,本發(fā)明實(shí)施例提供一種應(yīng)用服務(wù)器,應(yīng)用于應(yīng)用服務(wù)器包括獲取模塊和處理模塊,其中,
所述獲取模塊用于,獲取在預(yù)設(shè)時(shí)段內(nèi)對(duì)線程池中的依賴消息處理請(qǐng)求進(jìn)行處理的成功率,所述依賴消息處理請(qǐng)求為所述應(yīng)用服務(wù)器依賴第三方服務(wù)器處理的請(qǐng)求;
所述處理模塊用于,在所述成功率大于預(yù)設(shè)成功率時(shí),同時(shí)對(duì)所述線程池中所有的依賴消息處理請(qǐng)求進(jìn)行處理;
所述處理模塊還用于,在所述成功率小于預(yù)設(shè)成功率時(shí),同時(shí)對(duì)所述線程池中、預(yù)設(shè)個(gè)數(shù)的依賴消息處理請(qǐng)求進(jìn)行處理,所述預(yù)設(shè)個(gè)數(shù)小于所述線程池最多可容納的依賴消息處理請(qǐng)求的個(gè)數(shù)。
在一種可能的實(shí)施方式中,所述獲取模塊具體用于:
獲取在所述預(yù)設(shè)時(shí)段內(nèi)、根據(jù)所述線程池中的依賴消息處理請(qǐng)求向所述第三方服務(wù)器發(fā)送的請(qǐng)求消息的第一個(gè)數(shù);
獲取在所述預(yù)設(shè)時(shí)段內(nèi)接收到所述第三服務(wù)器發(fā)送的、與所述請(qǐng)求消息對(duì)應(yīng)的成功響應(yīng)消息的第二個(gè)數(shù);
根據(jù)所述第一個(gè)數(shù)和所述第二個(gè)數(shù),確定所述成功率。
在另一種可能的實(shí)施方式中,所述處理模塊具體用于:
按照所述線程池中各依賴消息處理請(qǐng)求的接收時(shí)間,確定所述預(yù)設(shè)個(gè)數(shù)個(gè)依賴消息處理請(qǐng)求;
同時(shí)對(duì)所述預(yù)設(shè)個(gè)數(shù)個(gè)依賴消息處理請(qǐng)求進(jìn)行處理。
在另一種可能的實(shí)施方式中,所述應(yīng)用服務(wù)器還包括接收模塊、判斷模塊和存儲(chǔ)模塊,其中,
所述接收模塊用于,接收終端設(shè)備發(fā)送的第一依賴消息處理請(qǐng)求;
所述判斷模塊用于,判斷所述線程池中的請(qǐng)求個(gè)數(shù)是否小于預(yù)設(shè)閾值;
所述存儲(chǔ)模塊用于,在所述判斷模塊判斷所述線程池中的請(qǐng)求個(gè)數(shù)小于預(yù)設(shè)閾值時(shí),將所述第一依賴消息處理請(qǐng)求存放到所述線程池;
所述存儲(chǔ)模塊還用于,在所述判斷模塊判斷所述線程池中的請(qǐng)求個(gè)數(shù)大于或等于預(yù)設(shè)閾值時(shí),將所述第一依賴消息處理請(qǐng)求暫存在待處理請(qǐng)求隊(duì)列,并獲取所述線程池中包括的請(qǐng)求的個(gè)數(shù)及所述依賴消息處理請(qǐng)求在所述待處理請(qǐng)求隊(duì)列中的位置,直至所述線程池中的請(qǐng)求的個(gè)數(shù)小于預(yù)設(shè)閾值、且所述依賴消息處理請(qǐng)求位于所述待處理請(qǐng)求隊(duì)列的隊(duì)首時(shí),將所述第一依賴消息處理請(qǐng)求存儲(chǔ)到所述線程池。
在另一種可能的實(shí)施方式中,所述應(yīng)用服務(wù)器還包括確定模塊,其中,
所述確定模塊用于,在所述線程池中確定處理完成的依賴消息處理請(qǐng)求;
所述存儲(chǔ)模塊還用于,將所述處理完成的依賴消息處理請(qǐng)求移出所述線程池;
所述存儲(chǔ)模塊還用于,在所述待處理請(qǐng)求隊(duì)列中存在依賴消息處理請(qǐng)求,將位于待處理請(qǐng)求隊(duì)列隊(duì)首的依賴消息處理請(qǐng)求存儲(chǔ)到所述線程池。
本發(fā)明實(shí)施例提供的消息處理方法及設(shè)備,在應(yīng)用服務(wù)器中設(shè)置線程池,以使應(yīng)用服務(wù)器同時(shí)最多只能對(duì)線程池中的所有依賴消息處理請(qǐng)求進(jìn)行處理,這樣,當(dāng)應(yīng)用服務(wù)器在短時(shí)段內(nèi)接收到大量的依賴消息處理請(qǐng)求時(shí),可以有效避免應(yīng)用服務(wù)器宕機(jī)。進(jìn)一步的,在應(yīng)用服務(wù)器對(duì)線程池中的依賴消息處理請(qǐng)求進(jìn)行處理的過(guò)程中,應(yīng)用服務(wù)器對(duì)根據(jù)預(yù)設(shè)時(shí)段內(nèi)對(duì)線程池中的依賴消息處理請(qǐng)求進(jìn)行處理的成功率,按照不同的方式對(duì)線程池中的依賴消息處理請(qǐng)求進(jìn)行處理,具體的,當(dāng)成功率大于預(yù)設(shè)成功率時(shí),則說(shuō)明依賴的第三方服務(wù)器正常,則同時(shí)對(duì)所述線程池中所有的依賴消息處理請(qǐng)求進(jìn)行處理,以提高處理效率;當(dāng)成功率小于預(yù)設(shè)成功率時(shí),則說(shuō)明依賴的第三方服務(wù)器可能故障,則同時(shí)對(duì)所述線程池中、預(yù)設(shè)個(gè)數(shù)的依賴消息處理請(qǐng)求進(jìn)行處理,避免應(yīng)用服務(wù)器做大量無(wú)用操作、及應(yīng)用服務(wù)器連續(xù)向第三方服務(wù)器請(qǐng)求數(shù)據(jù)而導(dǎo)致的宕機(jī)。
附圖說(shuō)明
為了更清楚地說(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ù)這些附圖獲得其他的附圖。
圖1為本發(fā)明實(shí)施例提供的消息處理方法的應(yīng)用場(chǎng)景示意圖;
圖2為本發(fā)明實(shí)施例提供的線程池的部署示意圖;
圖3為本發(fā)明實(shí)施例提供的消息處理方法的流程示意圖;
圖4為本發(fā)明實(shí)施例提供的獲取成功率方法的流程示意圖;
圖5為本發(fā)明實(shí)施例提供對(duì)依賴消息處理請(qǐng)求處理方法的流程示意圖;
圖6為本發(fā)明實(shí)施例提供的應(yīng)用服務(wù)器的結(jié)構(gòu)示意圖一;
圖7為本發(fā)明實(shí)施例提供的應(yīng)用服務(wù)器的結(jié)構(gòu)示意圖二。
具體實(shí)施方式
為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
圖1為本發(fā)明實(shí)施例提供的消息處理方法的應(yīng)用場(chǎng)景示意圖。請(qǐng)參見(jiàn)圖1,包括終端設(shè)備101、應(yīng)用服務(wù)器102和至少一個(gè)第三方服務(wù)器(分別記為103-1至103-N)。終端設(shè)備101可以為手機(jī)、電腦、電視等設(shè)備,在終端設(shè)備101中安裝有應(yīng)用程序,該應(yīng)用程序的頁(yè)面中包括依賴項(xiàng),依賴項(xiàng)中的數(shù)據(jù)依賴于至少一個(gè)第三方服務(wù)器。應(yīng)用服務(wù)器102為應(yīng)用程序?qū)?yīng)的服務(wù)器,應(yīng)用服務(wù)器102可以向終端設(shè)備提供應(yīng)用程序中的數(shù)據(jù)。應(yīng)用服務(wù)器102可以和各第三方服務(wù)器通信,以實(shí)現(xiàn)在各第三方服務(wù)器中獲取依賴項(xiàng)對(duì)應(yīng)的數(shù)據(jù),并向終端設(shè)備101提供依賴項(xiàng)對(duì)應(yīng)的數(shù)據(jù)。
在本申請(qǐng)中,在應(yīng)用服務(wù)器102中還設(shè)置有線程池。下面,結(jié)合圖2,對(duì)應(yīng)用服務(wù)器102中的線程池進(jìn)行詳細(xì)說(shuō)明。
圖2為本發(fā)明實(shí)施例提供的線程池的部署示意圖。請(qǐng)參見(jiàn)圖2,包括終端設(shè)備101和應(yīng)用服務(wù)器102。在終端設(shè)備101中安裝有應(yīng)用程序,在應(yīng)用程序中包括多個(gè)依賴項(xiàng)(分別記為依賴項(xiàng)1-依賴項(xiàng)N),每一個(gè)依賴項(xiàng)中的數(shù)據(jù)均依賴于至少一個(gè)第三方服務(wù)器。在應(yīng)用服務(wù)器102中,為每一個(gè)依賴項(xiàng)設(shè)置有對(duì)應(yīng)的線程池(分別記為線程池1-線程池N)。每一個(gè)線程池分別用于存儲(chǔ)終端設(shè)備向應(yīng)用服務(wù)器發(fā)送的、依賴項(xiàng)對(duì)應(yīng)的依賴消息處理請(qǐng)求,例如,線程池1用于存儲(chǔ)終端設(shè)備發(fā)送的、依賴項(xiàng)1對(duì)應(yīng)的依賴消息處理請(qǐng)求,線程池2用于存儲(chǔ)終端設(shè)備發(fā)送的、依賴項(xiàng)2對(duì)應(yīng)的依賴消息處理請(qǐng)求。每一個(gè)線程池具有最大存儲(chǔ)量,例如,一個(gè)線程池的最大存儲(chǔ)量可以為1000個(gè)依賴消息處理請(qǐng)求等。
在本申請(qǐng)中,在應(yīng)用服務(wù)器102對(duì)一個(gè)線程池中的依賴消息處理請(qǐng)求進(jìn)行處理的過(guò)程中,當(dāng)該線程池中的依賴消息處理請(qǐng)求對(duì)應(yīng)的第三方服務(wù)器均為正常狀態(tài)時(shí),應(yīng)用服務(wù)器102可以同時(shí)對(duì)線程池中的所有賴消息處理請(qǐng)求進(jìn)行處理。當(dāng)該線程池中的依賴消息處理請(qǐng)求對(duì)應(yīng)的第三方服務(wù)器出現(xiàn)故障時(shí),應(yīng)用服務(wù)器102可以同時(shí)對(duì)線程池中的一部分依賴消息處理請(qǐng)求進(jìn)行處理,可選的,該一部分依賴消息處理請(qǐng)求的個(gè)數(shù)可以為線程池最大可容納請(qǐng)求個(gè)數(shù)的10%等,進(jìn)而避免在第三方服務(wù)器故障時(shí),導(dǎo)致應(yīng)用服務(wù)器出現(xiàn)故障,進(jìn)而提高應(yīng)用服務(wù)器對(duì)消息進(jìn)行處理的可靠性。
需要說(shuō)明的是,應(yīng)用服務(wù)器對(duì)應(yīng)用程序中任意一個(gè)依賴項(xiàng)對(duì)應(yīng)的依賴消息處理請(qǐng)求進(jìn)行處理的過(guò)程相同。下面,以應(yīng)用服務(wù)器對(duì)任意一個(gè)依賴項(xiàng)對(duì)應(yīng)的依賴消息處理請(qǐng)求進(jìn)行處理的過(guò)程為例,通過(guò)具體實(shí)施例,對(duì)本申請(qǐng)所示的技術(shù)方案進(jìn)行詳細(xì)說(shuō)明。下面幾個(gè)具體的實(shí)施例可以相互結(jié)合,相同或相似的內(nèi)容在不同的實(shí)施例中不再進(jìn)行重復(fù)描述。
圖3為本發(fā)明實(shí)施例提供的消息處理方法的流程示意圖。該方法的執(zhí)行主體為應(yīng)用服務(wù)器,請(qǐng)參見(jiàn)圖3,該方法可以包括:
S301、獲取在預(yù)設(shè)時(shí)段內(nèi)對(duì)線程池中的依賴消息處理請(qǐng)求進(jìn)行處理的成功率,依賴消息處理請(qǐng)求為應(yīng)用服務(wù)器依賴第三方服務(wù)器處理的請(qǐng)求。
在本發(fā)明實(shí)施例中,在線程池中包括一個(gè)依賴項(xiàng)對(duì)應(yīng)的多個(gè)依賴消息處理請(qǐng)求,該多個(gè)依賴消息處理請(qǐng)求為多個(gè)終端設(shè)備向應(yīng)用服務(wù)器發(fā)送的。例如,假設(shè)應(yīng)用程序1中包括紅包功能,該紅包功能中的數(shù)據(jù)依賴于第三方服務(wù)器,在應(yīng)用服務(wù)器1中設(shè)置有與紅包功能對(duì)應(yīng)的線程池1,當(dāng)安裝應(yīng)用程序1的終端設(shè)備需要獲取紅包功能對(duì)應(yīng)的數(shù)據(jù)時(shí),終端設(shè)備向應(yīng)用服務(wù)器發(fā)送依賴消息處理請(qǐng)求,則應(yīng)用服務(wù)器1將依賴消息處理請(qǐng)求存儲(chǔ)到線程池1中,以使線程池1中的依賴消息處理請(qǐng)求均為用于請(qǐng)求紅包功能數(shù)據(jù)的請(qǐng)求。
在實(shí)際應(yīng)用過(guò)程中,當(dāng)線程池中有依賴消息處理請(qǐng)求時(shí),應(yīng)用服務(wù)器則持續(xù)對(duì)線程池中的依賴消息處理請(qǐng)求進(jìn)行處理。應(yīng)用程序服務(wù)器可以周期性的執(zhí)行圖3實(shí)施例所示的方法,以確定對(duì)線程池中的依賴消息處理請(qǐng)求進(jìn)行處理的具體方式。可選的,該周期可以為30秒、1分鐘等,可以根據(jù)實(shí)際需要設(shè)置該周期。
在應(yīng)用服務(wù)器對(duì)線程池中的依賴消息處理請(qǐng)求進(jìn)行處理的過(guò)程中,應(yīng)用服務(wù)器獲取在預(yù)設(shè)時(shí)段內(nèi)對(duì)線程池中的依賴消息處理請(qǐng)求進(jìn)行處理的成功率??蛇x的,預(yù)設(shè)時(shí)段可以為當(dāng)前時(shí)刻之前預(yù)設(shè)時(shí)長(zhǎng)對(duì)應(yīng)的時(shí)段,例如,預(yù)設(shè)時(shí)段可以為當(dāng)前時(shí)刻之前的10分鐘、當(dāng)前時(shí)刻之前的5分鐘等,在實(shí)際應(yīng)用過(guò)程中,可以根據(jù)實(shí)際需要設(shè)置預(yù)設(shè)時(shí)段。
由于應(yīng)用服務(wù)器對(duì)依賴消息處理請(qǐng)求進(jìn)行時(shí),需要依賴第三方服務(wù)器,當(dāng)?shù)谌椒?wù)器出現(xiàn)故障時(shí),應(yīng)用服務(wù)器無(wú)法對(duì)依賴消息處理請(qǐng)求進(jìn)行功能處理。當(dāng)應(yīng)用服務(wù)器在預(yù)設(shè)時(shí)段內(nèi)對(duì)線程池中的依賴消息處理請(qǐng)求進(jìn)行處理的成功率大于預(yù)設(shè)成功率時(shí),則說(shuō)明第三方服務(wù)器正常,當(dāng)成功率小于預(yù)設(shè)成功率時(shí),說(shuō)明第三方服務(wù)器故障。該預(yù)設(shè)成功率可以為60%、70%等,在實(shí)際應(yīng)用過(guò)程中,可以根據(jù)實(shí)際需要設(shè)置該預(yù)設(shè)成功率。
S302、若成功率大于預(yù)設(shè)成功率,則同時(shí)對(duì)線程池中所有的依賴消息處理請(qǐng)求進(jìn)行處理。
當(dāng)成功率大于預(yù)設(shè)成功率時(shí),說(shuō)明第三方服務(wù)器正常,則應(yīng)用服務(wù)器可以同時(shí)對(duì)線程池中所有的依賴消息處理請(qǐng)求進(jìn)行處理。可選的,在應(yīng)用服務(wù)器同時(shí)對(duì)線程池中所有的依賴消息處理請(qǐng)求進(jìn)行處理的過(guò)程中,應(yīng)用服務(wù)器可以在不同的時(shí)間片段對(duì)不同的依賴消息處理請(qǐng)求進(jìn)行處理,該時(shí)間片段的時(shí)長(zhǎng)通常較短。例如,假設(shè)線程池中有100個(gè)依賴消息處理請(qǐng)求,分別記為依賴消息處理請(qǐng)求1-依賴消息處理請(qǐng)求100,則應(yīng)用服務(wù)器可以在時(shí)間片段1對(duì)依賴消息處理請(qǐng)求1處理,在時(shí)間片段2對(duì)依賴消息處理請(qǐng)求2處理,依次類推,在時(shí)間片段100對(duì)依賴消息處理請(qǐng)求100處理;在執(zhí)行完一輪之后,在時(shí)間片段101再繼續(xù)對(duì)依賴消息處理請(qǐng)求1處理,在時(shí)間片段102繼續(xù)對(duì)依賴消息處理請(qǐng)求2處理,直至依賴消息處理請(qǐng)求被處理完成。
在該過(guò)程中,通過(guò)設(shè)置線程池,使得應(yīng)用服務(wù)器同時(shí)最多只能對(duì)線程池中的所有依賴消息處理請(qǐng)求進(jìn)行處理,這樣,當(dāng)應(yīng)用服務(wù)器在短時(shí)段內(nèi)接收到大量的依賴消息處理請(qǐng)求時(shí),可以有效避免應(yīng)用服務(wù)器宕機(jī)。
S303、若成功率小于預(yù)設(shè)成功率,則同時(shí)對(duì)線程池中、預(yù)設(shè)個(gè)數(shù)的依賴消息處理請(qǐng)求進(jìn)行處理,預(yù)設(shè)個(gè)數(shù)小于線程池最多可容納的依賴消息處理請(qǐng)求的個(gè)數(shù)。
當(dāng)成功率大于預(yù)設(shè)成功率時(shí),說(shuō)明第三方服務(wù)器可能出現(xiàn)故障,為了避免應(yīng)用服務(wù)器連續(xù)向第三方服務(wù)器請(qǐng)求數(shù)據(jù)而出現(xiàn)故障,則應(yīng)用服務(wù)器可以同時(shí)對(duì)線程池中、預(yù)設(shè)個(gè)數(shù)的依賴消息處理請(qǐng)求進(jìn)行處理,預(yù)設(shè)個(gè)數(shù)小于線程池最多可容納的依賴消息處理請(qǐng)求的個(gè)數(shù)。可選的,該預(yù)設(shè)個(gè)數(shù)可以為線程池最多可容納的依賴消息處理請(qǐng)求的個(gè)數(shù)的1%、5%、10%等,例如,假設(shè)線程池最多可容納1000個(gè)依賴消息處理請(qǐng)求,則該預(yù)設(shè)個(gè)數(shù)可以為10個(gè)、15個(gè)等。在實(shí)際應(yīng)用過(guò)程中,可以根據(jù)實(shí)際需要設(shè)置該預(yù)設(shè)個(gè)數(shù)的大小。
可選的,應(yīng)用服務(wù)器可以按照線程池中各依賴消息處理請(qǐng)求的接收時(shí)間,確定預(yù)設(shè)個(gè)數(shù)個(gè)依賴消息處理請(qǐng)求,并同時(shí)對(duì)預(yù)設(shè)個(gè)數(shù)個(gè)依賴消息處理請(qǐng)求進(jìn)行處理。可選的,可以對(duì)接收時(shí)間最早的預(yù)設(shè)個(gè)數(shù)個(gè)依賴消息處理請(qǐng)求進(jìn)行處理。
在上述過(guò)程中,應(yīng)用服務(wù)器通過(guò)對(duì)線程池中的一部分依賴消息處理請(qǐng)求進(jìn)行處理,不但可以避免應(yīng)用服務(wù)器做過(guò)多的無(wú)用操作,還可以避免應(yīng)用服務(wù)器連續(xù)向第三方服務(wù)器請(qǐng)求數(shù)據(jù)而導(dǎo)致的宕機(jī),進(jìn)一步的,應(yīng)用服務(wù)器還可以根據(jù)對(duì)該部分依賴消息處理請(qǐng)求進(jìn)行處理的結(jié)果,判斷第三方服務(wù)器是否恢復(fù)正常,在第三方服務(wù)器恢復(fù)正常時(shí),則可以同時(shí)對(duì)線程池中的所有依賴消息處理請(qǐng)求進(jìn)行處理。
本發(fā)明實(shí)施例提供的消息處理方法,在應(yīng)用服務(wù)器中設(shè)置線程池,以使應(yīng)用服務(wù)器同時(shí)最多只能對(duì)線程池中的所有依賴消息處理請(qǐng)求進(jìn)行處理,這樣,當(dāng)應(yīng)用服務(wù)器在短時(shí)段內(nèi)接收到大量的依賴消息處理請(qǐng)求時(shí),可以有效避免應(yīng)用服務(wù)器宕機(jī)。進(jìn)一步的,在應(yīng)用服務(wù)器對(duì)線程池中的依賴消息處理請(qǐng)求進(jìn)行處理的過(guò)程中,應(yīng)用服務(wù)器對(duì)根據(jù)預(yù)設(shè)時(shí)段內(nèi)對(duì)線程池中的依賴消息處理請(qǐng)求進(jìn)行處理的成功率,按照不同的方式對(duì)線程池中的依賴消息處理請(qǐng)求進(jìn)行處理,具體的,當(dāng)成功率大于預(yù)設(shè)成功率時(shí),則說(shuō)明依賴的第三方服務(wù)器正常,則同時(shí)對(duì)所述線程池中所有的依賴消息處理請(qǐng)求進(jìn)行處理,以提高處理效率;當(dāng)成功率小于預(yù)設(shè)成功率時(shí),則說(shuō)明依賴的第三方服務(wù)器可能故障,則同時(shí)對(duì)所述線程池中、預(yù)設(shè)個(gè)數(shù)的依賴消息處理請(qǐng)求進(jìn)行處理,避免應(yīng)用服務(wù)器做大量無(wú)用操作、及應(yīng)用服務(wù)器連續(xù)向第三方服務(wù)器請(qǐng)求數(shù)據(jù)而導(dǎo)致的宕機(jī)。
在圖3所示實(shí)施例的基礎(chǔ)上,可選的,可以通過(guò)如下可行的實(shí)現(xiàn)方式獲取在預(yù)設(shè)時(shí)段內(nèi)對(duì)線程池中的依賴消息處理請(qǐng)求進(jìn)行處理的成功率(圖3所示實(shí)施例中的S301)。具體的,請(qǐng)參見(jiàn)圖4所示的實(shí)施例。
圖4為本發(fā)明實(shí)施例提供的獲取成功率方法的流程示意圖。請(qǐng)參見(jiàn)圖4,該方法可以包括:
S401、獲取在預(yù)設(shè)時(shí)段內(nèi)、根據(jù)線程池中的依賴消息處理請(qǐng)求向第三方服務(wù)器發(fā)送的請(qǐng)求消息的第一個(gè)數(shù)。
由于依賴消息處理請(qǐng)求依賴于第三方服務(wù)器,因此,當(dāng)應(yīng)用服務(wù)器對(duì)線程池中的依賴消息處理請(qǐng)求進(jìn)行處理的過(guò)程中,應(yīng)用服務(wù)器需要向第三方服務(wù)器發(fā)送請(qǐng)求消息。
S402、獲取在預(yù)設(shè)時(shí)段內(nèi)接收到第三服務(wù)器發(fā)送的、與請(qǐng)求消息對(duì)應(yīng)的成功響應(yīng)消息的第二個(gè)數(shù)。
S403、根據(jù)第一個(gè)數(shù)和第二個(gè)數(shù),確定成功率。
可選的,可以將第二個(gè)數(shù)和第一個(gè)數(shù)的比值確定為該成功率。
在圖4所示的實(shí)施例中,通過(guò)第一個(gè)數(shù)和第二個(gè)數(shù)的比值,可以準(zhǔn)確的確定出預(yù)設(shè)時(shí)段內(nèi)應(yīng)用服務(wù)器對(duì)線程池中的依賴消息處理請(qǐng)求進(jìn)行處理的成功率。
在上述任意一個(gè)實(shí)施例的基礎(chǔ)上,在應(yīng)用服務(wù)器接收到終端設(shè)備發(fā)送的依賴消息處理請(qǐng)求時(shí),應(yīng)用服務(wù)器根據(jù)依賴消息處理請(qǐng)求對(duì)應(yīng)的線程池中的請(qǐng)求個(gè)數(shù),對(duì)依賴消息處理請(qǐng)求進(jìn)行不同的操作。下面,結(jié)合圖5所示的實(shí)施例,以應(yīng)用服務(wù)器對(duì)終端設(shè)備發(fā)送的第一依賴消息處理請(qǐng)求的處理過(guò)程為例,對(duì)應(yīng)用服務(wù)器對(duì)依賴消息處理請(qǐng)求進(jìn)行處理的過(guò)程進(jìn)行詳細(xì)說(shuō)明。
圖5為本發(fā)明實(shí)施例提供對(duì)依賴消息處理請(qǐng)求處理方法的流程示意圖。請(qǐng)參見(jiàn)圖5,該方法可以包括:
S501、接收終端設(shè)備發(fā)送的第一依賴消息處理請(qǐng)求。
S502、判斷線程池中的請(qǐng)求個(gè)數(shù)是否小于預(yù)設(shè)閾值。
若是,則執(zhí)行S503。若否,則執(zhí)行S504-S505。
可選的,該預(yù)設(shè)閾值可以為線程池中最多可容納的依賴消息處理請(qǐng)求的個(gè)數(shù)。
S503、將第一依賴消息處理請(qǐng)求存放到線程池。
當(dāng)線程池中的請(qǐng)求個(gè)數(shù)是否小于預(yù)設(shè)閾值時(shí),說(shuō)明線程池中存在未使用的存儲(chǔ)空間,則可以直接將第一依賴消息處理請(qǐng)求存放到線程池。
S504、將第一依賴消息處理請(qǐng)求暫存在待處理請(qǐng)求隊(duì)列。
當(dāng)線程池中的請(qǐng)求個(gè)數(shù)是否大于或等于預(yù)設(shè)閾值時(shí),說(shuō)明線程池中不存在未使用的存儲(chǔ)空間,無(wú)法直接向線程池中存儲(chǔ)該第一依賴消息處理請(qǐng)求。此時(shí),可以將第一依賴消息處理請(qǐng)求暫存在待處理請(qǐng)求隊(duì)列中。
S505、獲取線程池中包括的請(qǐng)求的個(gè)數(shù)及依賴消息處理請(qǐng)求在待處理請(qǐng)求隊(duì)列中的位置,直至線程池中的請(qǐng)求的個(gè)數(shù)小于預(yù)設(shè)閾值、且依賴消息處理請(qǐng)求位于待處理請(qǐng)求隊(duì)列的隊(duì)首時(shí),將第一依賴消息處理請(qǐng)求存儲(chǔ)到線程池。
在實(shí)際應(yīng)用過(guò)程中,由于應(yīng)用服務(wù)器在不停的對(duì)線程池中的依賴消息處理請(qǐng)求進(jìn)行處理,當(dāng)線程池中的依賴消息處理請(qǐng)求被處理完成之后,將處理完成的依賴消息處理請(qǐng)求移出線程池,此時(shí),若所述待處理請(qǐng)求隊(duì)列中存在依賴消息處理請(qǐng)求,則將位于待處理請(qǐng)求隊(duì)列隊(duì)首的依賴消息處理請(qǐng)求存儲(chǔ)到所述線程池。
在應(yīng)用服務(wù)器將第一依賴消息處理請(qǐng)求暫存在待處理請(qǐng)求隊(duì)列之后,根據(jù)應(yīng)用服務(wù)器對(duì)線程池中的依賴消息的處理情況,對(duì)第一依賴消息處理請(qǐng)求在待處理請(qǐng)求隊(duì)列中的位置進(jìn)行更新。應(yīng)用服務(wù)器實(shí)時(shí)獲取線程池中包括的請(qǐng)求的個(gè)數(shù)及依賴消息處理請(qǐng)求在待處理請(qǐng)求隊(duì)列中的位置,直至線程池中的請(qǐng)求的個(gè)數(shù)小于預(yù)設(shè)閾值、且依賴消息處理請(qǐng)求位于待處理請(qǐng)求隊(duì)列的隊(duì)首時(shí),則將第一依賴消息處理請(qǐng)求存儲(chǔ)到線程池。
通過(guò)上述方法,可以保證線程池中最多包括預(yù)設(shè)閾值個(gè)依賴消息處理請(qǐng)求,并且可以保證有序的對(duì)接收到的依賴消息處理請(qǐng)求進(jìn)行處理。
下面,通過(guò)具體實(shí)施例,對(duì)上述方法實(shí)施例所示的技術(shù)方案進(jìn)行詳細(xì)說(shuō)明。
示例性的,假設(shè)終端設(shè)備中安裝有應(yīng)用程序1,應(yīng)用程序1對(duì)應(yīng)的服務(wù)器為應(yīng)用服務(wù)器,應(yīng)用程序1中包括紅包數(shù)據(jù),該紅包數(shù)據(jù)來(lái)自于打車服務(wù)器(第三方服務(wù)器)。
在實(shí)際應(yīng)用過(guò)程中,當(dāng)用戶需要在終端設(shè)備中查看應(yīng)用程序1中的紅包數(shù)據(jù)時(shí),用戶在終端設(shè)備中輸入相應(yīng)的查看指令,以使終端設(shè)備向應(yīng)用服務(wù)器發(fā)送處理請(qǐng)求1,該處理請(qǐng)求1用于請(qǐng)求獲取應(yīng)用程序1中的紅包數(shù)據(jù)。
在應(yīng)用服務(wù)器接收到處理請(qǐng)求1之后,應(yīng)用程序判斷處理請(qǐng)求1對(duì)應(yīng)的線程池中的請(qǐng)求個(gè)數(shù)大于100個(gè)(預(yù)設(shè)閾值),則應(yīng)用程序?qū)⑻幚碚?qǐng)求1存放到待處理請(qǐng)求隊(duì)列中。假設(shè)在一段時(shí)長(zhǎng)之后,處理請(qǐng)求1被更新到待處理請(qǐng)求隊(duì)列的隊(duì)首,在此之后,若線程池1中的又一個(gè)請(qǐng)求被處理完成,則可以將處理請(qǐng)求1存儲(chǔ)到線程池1中。
在應(yīng)用服務(wù)器對(duì)線程池1中的請(qǐng)求進(jìn)行處理的過(guò)程中,應(yīng)用服務(wù)器需要向打車服務(wù)器獲取相關(guān)數(shù)據(jù),以實(shí)現(xiàn)對(duì)線程池1中的請(qǐng)求進(jìn)行處理。
假設(shè)當(dāng)前時(shí)刻為1點(diǎn)20分,在1點(diǎn)20分之前,應(yīng)用服務(wù)器對(duì)線程池1中的100個(gè)請(qǐng)求進(jìn)行同時(shí)處理。在1點(diǎn)20分時(shí),應(yīng)用服務(wù)器獲取在1點(diǎn)10分至1點(diǎn)20分之內(nèi)、對(duì)線程池1中的請(qǐng)求進(jìn)行處理的成功率。
假設(shè)在1點(diǎn)20分獲取得到的成功率為30%,小于預(yù)設(shè)成功率(假設(shè)為80%),則判斷打車服務(wù)器可能出現(xiàn)故障,則應(yīng)用服務(wù)器暫停對(duì)100個(gè)請(qǐng)求中的90個(gè)請(qǐng)求進(jìn)行處理,應(yīng)用服務(wù)器僅對(duì)線程池中的10個(gè)請(qǐng)求進(jìn)行同時(shí)處理,以避免應(yīng)用服務(wù)器做過(guò)多的無(wú)用操作、及避免應(yīng)用服務(wù)器向打車服務(wù)器連續(xù)發(fā)送大量請(qǐng)求而導(dǎo)致宕機(jī)。
在1點(diǎn)25分時(shí),假設(shè)應(yīng)用服務(wù)器獲取到的成功率為90%,大于預(yù)設(shè)成功率(假設(shè)為80%),則判斷打車服務(wù)器正常,則應(yīng)用服務(wù)器對(duì)線程池1中的100個(gè)請(qǐng)求進(jìn)行同時(shí)處理,進(jìn)而提高對(duì)請(qǐng)求進(jìn)行處理的效率。
圖6為本發(fā)明實(shí)施例提供的應(yīng)用服務(wù)器的結(jié)構(gòu)示意圖一。請(qǐng)參見(jiàn)圖6,該應(yīng)用服務(wù)器可以包括獲取模塊11和處理模塊12,其中,
所述獲取模塊11用于,獲取在預(yù)設(shè)時(shí)段內(nèi)對(duì)線程池中的依賴消息處理請(qǐng)求進(jìn)行處理的成功率,所述依賴消息處理請(qǐng)求為所述應(yīng)用服務(wù)器依賴第三方服務(wù)器處理的請(qǐng)求;
所述處理模塊12用于,在所述成功率大于預(yù)設(shè)成功率時(shí),同時(shí)對(duì)所述線程池中所有的依賴消息處理請(qǐng)求進(jìn)行處理;
所述處理模塊12還用于,在所述成功率小于預(yù)設(shè)成功率時(shí),同時(shí)對(duì)所述線程池中、預(yù)設(shè)個(gè)數(shù)的依賴消息處理請(qǐng)求進(jìn)行處理,所述預(yù)設(shè)個(gè)數(shù)小于所述線程池最多可容納的依賴消息處理請(qǐng)求的個(gè)數(shù)。
本發(fā)明實(shí)施例提供的應(yīng)用服務(wù)器可以執(zhí)行上述方法實(shí)施例所示的技術(shù)方案,其實(shí)現(xiàn)原理以及有益效果類似,此處不再進(jìn)行贅述。
在一種可能的實(shí)時(shí)方式中,所述獲取模塊11具體用于:
獲取在所述預(yù)設(shè)時(shí)段內(nèi)、根據(jù)所述線程池中的依賴消息處理請(qǐng)求向所述第三方服務(wù)器發(fā)送的請(qǐng)求消息的第一個(gè)數(shù);
獲取在所述預(yù)設(shè)時(shí)段內(nèi)接收到所述第三服務(wù)器發(fā)送的、與所述請(qǐng)求消息對(duì)應(yīng)的成功響應(yīng)消息的第二個(gè)數(shù);
根據(jù)所述第一個(gè)數(shù)和所述第二個(gè)數(shù),確定所述成功率。
在另一種可能的實(shí)時(shí)方式中,所述處理模塊12具體用于:
按照所述線程池中各依賴消息處理請(qǐng)求的接收時(shí)間,確定所述預(yù)設(shè)個(gè)數(shù)個(gè)依賴消息處理請(qǐng)求;
同時(shí)對(duì)所述預(yù)設(shè)個(gè)數(shù)個(gè)依賴消息處理請(qǐng)求進(jìn)行處理。
圖7為本發(fā)明實(shí)施例提供的應(yīng)用服務(wù)器的結(jié)構(gòu)示意圖二。在圖6所示實(shí)施的基礎(chǔ)上,請(qǐng)參見(jiàn)圖7,所述應(yīng)用服務(wù)器還包括接收模塊13、判斷模塊14和存儲(chǔ)模塊15,其中,
所述接收模塊13用于,接收終端設(shè)備發(fā)送的第一依賴消息處理請(qǐng)求;
所述判斷模塊14用于,判斷所述線程池中的請(qǐng)求個(gè)數(shù)是否小于預(yù)設(shè)閾值;
所述存儲(chǔ)模塊15用于,在所述判斷模塊14判斷所述線程池中的請(qǐng)求個(gè)數(shù)小于預(yù)設(shè)閾值時(shí),將所述第一依賴消息處理請(qǐng)求存放到所述線程池;
所述存儲(chǔ)模塊15還用于,在所述判斷模塊14判斷所述線程池中的請(qǐng)求個(gè)數(shù)大于或等于預(yù)設(shè)閾值時(shí),將所述第一依賴消息處理請(qǐng)求暫存在待處理請(qǐng)求隊(duì)列,并獲取所述線程池中包括的請(qǐng)求的個(gè)數(shù)及所述依賴消息處理請(qǐng)求在所述待處理請(qǐng)求隊(duì)列中的位置,直至所述線程池中的請(qǐng)求的個(gè)數(shù)小于預(yù)設(shè)閾值、且所述依賴消息處理請(qǐng)求位于所述待處理請(qǐng)求隊(duì)列的隊(duì)首時(shí),將所述第一依賴消息處理請(qǐng)求存儲(chǔ)到所述線程池。
在另一種可能的實(shí)時(shí)方式中,所述應(yīng)用服務(wù)器還包括確定模塊16,其中,
所述確定模塊16用于,在所述線程池中確定處理完成的依賴消息處理請(qǐng)求;
所述存儲(chǔ)模塊15還用于,將所述處理完成的依賴消息處理請(qǐng)求移出所述線程池;
所述存儲(chǔ)模塊15還用于,在所述待處理請(qǐng)求隊(duì)列中存在依賴消息處理請(qǐng)求,將位于待處理請(qǐng)求隊(duì)列隊(duì)首的依賴消息處理請(qǐng)求存儲(chǔ)到所述線程池。
本發(fā)明實(shí)施例提供的應(yīng)用服務(wù)器可以執(zhí)行上述方法實(shí)施例所示的技術(shù)方案,其實(shí)現(xiàn)原理以及有益效果類似,此處不再進(jìn)行贅述。
本領(lǐng)域普通技術(shù)人員可以理解:實(shí)現(xiàn)上述各方法實(shí)施例的全部或部分步驟可以通過(guò)程序指令相關(guān)的硬件來(lái)完成。前述的程序可以存儲(chǔ)于一計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中。該程序在執(zhí)行時(shí),執(zhí)行包括上述各方法實(shí)施例的步驟;而前述的存儲(chǔ)介質(zhì)包括:ROM、RAM、磁碟或者光盤等各種可以存儲(chǔ)程序代碼的介質(zhì)。
最后應(yīng)說(shuō)明的是:以上各實(shí)施例僅用以說(shuō)明本發(fā)明的技術(shù)方案,而非對(duì)其限制;盡管參照前述各實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)的說(shuō)明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:其依然可以對(duì)前述各實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對(duì)其中部分或者全部技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實(shí)施例技術(shù)方案的范圍。