本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,具體而言,涉及一種消息隊(duì)列處理方法及裝置。
背景技術(shù):
消息隊(duì)列(Message Queue,MQ)技術(shù)是一種應(yīng)用于分布式應(yīng)用間交換信息的技術(shù)。消息隊(duì)列為構(gòu)造以同步或異步方式實(shí)現(xiàn)的分布式應(yīng)用提供了松耦合的方法。消息隊(duì)列的應(yīng)用程序接口(Application Program Interface,API)被提供給新的或現(xiàn)存的應(yīng)用中。通過消息的發(fā)送來提供各應(yīng)用程序之間的信息交換功能。此外,消息隊(duì)列還可以被應(yīng)用于執(zhí)行其他多種功能,如要求服務(wù)或異步處理等。
服務(wù)器在處理消息隊(duì)列時,通常為其開啟一長運(yùn)行處理作業(yè)來進(jìn)行處理,當(dāng)檢測到消息隊(duì)列中出現(xiàn)待處理消息時,對該消息進(jìn)行處理。當(dāng)同時有大量消息進(jìn)入消息隊(duì)列中時,可以通過該長運(yùn)行處理作業(yè)對消息隊(duì)列中的消息逐一地進(jìn)行處理。但這樣的處理方法會造成消息的堆積,降低處理效率?;蛘?,也可以啟動一個或多個臨時運(yùn)行處理作業(yè)程序,并行地處理消息隊(duì)列中的消息。但臨時運(yùn)行處理作業(yè)本身也會占用CPU資源且消耗內(nèi)存,當(dāng)同時開啟較多地臨時運(yùn)行處理作業(yè)時反而會進(jìn)一步降低效率,影響長運(yùn)行處理作業(yè)的效率。
技術(shù)實(shí)現(xiàn)要素:
有鑒于此,本發(fā)明提供一種消息隊(duì)列處理方法及裝置,能夠提升消息隊(duì)列的處理效率,并避免對系統(tǒng)資源的大幅占用。
本發(fā)明的其他特性和優(yōu)點(diǎn)將通過下面的詳細(xì)描述變得顯然,或部分地通過本發(fā)明的實(shí)踐而習(xí)得。
根據(jù)本發(fā)明的一方面,提供了一種消息隊(duì)列處理方法,包括:啟動 監(jiān)控處理作業(yè),檢測消息隊(duì)列的消息隊(duì)列深度、所述消息隊(duì)列的當(dāng)前所有運(yùn)行處理作業(yè)的狀態(tài)與數(shù)目及當(dāng)前CPU的利用率;以及根據(jù)所述消息隊(duì)列深度、所述當(dāng)前所有運(yùn)行處理作業(yè)的狀態(tài)與數(shù)目及所述當(dāng)前CPU的利用率,確定是否啟動一新的臨時運(yùn)行處理作業(yè)。
根據(jù)本發(fā)明的一實(shí)施方式,其中根據(jù)所述消息隊(duì)列深度、所述當(dāng)前所有運(yùn)行處理作業(yè)的狀態(tài)與數(shù)目以及所述當(dāng)前CPU的利用率,確定是否啟動所述新的臨時運(yùn)行處理作業(yè)包括:判斷所述消息隊(duì)列深度是否超過一預(yù)設(shè)的新作業(yè)啟動閾值;如果所述消息隊(duì)列深度超過所述新作業(yè)啟動閾值,則判斷所述當(dāng)前所有運(yùn)行處理作業(yè)的數(shù)目是否超過一預(yù)設(shè)的作業(yè)總數(shù)閾值;如果所述當(dāng)前所有運(yùn)行處理作業(yè)的數(shù)目未超過所述作業(yè)總數(shù)閾值,則判斷所述當(dāng)前CPU利用率是否超過一預(yù)設(shè)的CPU利用率閾值;如果所述當(dāng)前CPU利用率未超過所述CPU利用率閾值,則啟動所述新的臨時運(yùn)行處理作業(yè)。
根據(jù)本發(fā)明的一實(shí)施方式,在啟動所述新的臨時運(yùn)行處理作業(yè)之后,還包括:判斷所述消息隊(duì)列中是否還有消息待處理;如果所述消息隊(duì)列中沒有消息待處理,則暫停所述監(jiān)控處理作業(yè),啟動休眠計(jì)時器,進(jìn)入休眠狀態(tài)。
根據(jù)本發(fā)明的一實(shí)施方式,該消息隊(duì)列處理方法還包括:判斷所述消息隊(duì)列深度是否超過一預(yù)設(shè)的警戒深度閾值;如果所述消息隊(duì)列深度超過所述警戒深度閾值,則給所述消息隊(duì)列發(fā)送警告信息。
根據(jù)本發(fā)明的一實(shí)施方式,該消息隊(duì)列處理方法還包括:判斷所述當(dāng)前所有運(yùn)行處理作業(yè)的狀態(tài)是否均處于鎖狀態(tài)或消息等待狀態(tài);如果所述當(dāng)前所有運(yùn)行處理作業(yè)的狀態(tài)均處于鎖狀態(tài)或消息等待狀態(tài),則給所述消息隊(duì)列發(fā)送警告信息。
根據(jù)本發(fā)明的一實(shí)施方式,該消息隊(duì)列處理方法還包括:通過預(yù)設(shè)標(biāo)志的設(shè)置來判斷啟動所述監(jiān)控處理作業(yè)還是啟動長運(yùn)行處理作業(yè)。
根據(jù)本發(fā)明的另一方面,提供了一種消息隊(duì)列處理裝置,包括:消息隊(duì)列檢測模塊,用于檢測消息隊(duì)列的消息隊(duì)列深度、所述消息隊(duì)列的當(dāng)前所有運(yùn)行處理作業(yè)的狀態(tài)與數(shù)目及當(dāng)前CPU的利用率;以及臨時作業(yè)啟動確定模塊,用于根據(jù)所述消息隊(duì)列檢測模塊檢測到的所述消息隊(duì) 列深度、所述當(dāng)前所有運(yùn)行處理作業(yè)的狀態(tài)與數(shù)目及當(dāng)前CPU的利用率,確定是否啟動一新的臨時運(yùn)行處理作業(yè)。
根據(jù)本發(fā)明的一實(shí)施方式,所述臨時作業(yè)啟動確定模塊包括:第一隊(duì)列深度判斷子模塊,用于判斷所述消息隊(duì)列檢測模塊檢測到的所述消息隊(duì)列深度是否超過一預(yù)設(shè)的新作業(yè)啟動閾值;第一作業(yè)狀態(tài)判斷子模塊,用于當(dāng)所述第一隊(duì)列深度判斷子模塊判斷所述消息隊(duì)列深度超過所述新作業(yè)啟動閾值時,判斷所述消息隊(duì)列檢測模塊檢測到的所述當(dāng)前所有運(yùn)行處理作業(yè)數(shù)目是否超過一預(yù)設(shè)的作業(yè)總數(shù)閾值;CPU利用率判斷子模塊,用于當(dāng)所述第一作業(yè)狀態(tài)判斷子模塊判斷所述當(dāng)前所有運(yùn)行處理作業(yè)數(shù)目未超過作業(yè)總數(shù)閾值時,判斷所述消息隊(duì)列檢測模塊檢測到的CPU利用率是否超過一預(yù)設(shè)的CPU利用閾值;以及臨時作業(yè)啟動子模塊,用于當(dāng)所述CPU利用率判斷子模塊判斷所述CPU利用率未超過CPU利用閾值時,啟動所述新的臨時運(yùn)行處理作業(yè)。
根據(jù)本發(fā)明的一實(shí)施方式,所述臨時作業(yè)啟動確定模塊還包括:消息判斷子模塊,用于當(dāng)所述臨時作業(yè)啟動子模塊啟動所述新的臨時運(yùn)行處理作業(yè)后,判斷所述消息隊(duì)列中是否還有消息待處理;以及休眠子模塊,用于當(dāng)所述消息判斷子模塊判斷所述消息隊(duì)列中沒有消息待處理時,暫停所述監(jiān)控處理作業(yè),啟動休眠計(jì)時器,進(jìn)入休眠狀態(tài)。
根據(jù)本發(fā)明的一實(shí)施方式,所述臨時作業(yè)啟動確定模塊還包括:第二隊(duì)列深度子模塊,用于所述判斷消息隊(duì)列檢測模塊檢測到的消息隊(duì)列深度是否超過一預(yù)設(shè)的警戒深度閾值;以及第一報警子模塊,用于當(dāng)所述第二隊(duì)列深度子模塊判斷所述消息隊(duì)列深度超過警戒深度閾值時,給所述消息隊(duì)列發(fā)送警告信息。
根據(jù)本發(fā)明的一實(shí)施方式,所述臨時作業(yè)啟動確定模塊還包括:第二作業(yè)狀態(tài)判斷子模塊,用于判斷所述消息隊(duì)列檢測模塊檢測到的所述當(dāng)前所有運(yùn)行處理作業(yè)的狀態(tài)是否均處于鎖狀態(tài)或消息等待狀態(tài);以及第二報警子模塊,用于當(dāng)所述第二作業(yè)狀態(tài)判斷子模塊判斷所述當(dāng)前所有運(yùn)行處理作業(yè)的狀態(tài)均處于鎖狀態(tài)或消息等待狀態(tài)時,給所述消息隊(duì)列發(fā)送警告信息。
根據(jù)本發(fā)明的一實(shí)施方式,所述消息隊(duì)列處理裝置還包括:監(jiān)控作 業(yè)判斷模塊,用于通過預(yù)設(shè)標(biāo)志的設(shè)置來判斷啟動所述監(jiān)控處理作業(yè)還是啟動長運(yùn)行處理作業(yè)。
根據(jù)本發(fā)明的消息隊(duì)列處理方法及裝置,能夠?qū)κ欠駟右恍碌呐R時運(yùn)行處理作業(yè)進(jìn)行判斷,從而避免了開啟大量臨時運(yùn)行處理作業(yè)而導(dǎo)致的浪費(fèi)系統(tǒng)資源及降低長運(yùn)行處理作業(yè)效率的問題,一方面可以提升消息隊(duì)列的處理效率,另一方面節(jié)省了系統(tǒng)資源。另外,根據(jù)一些實(shí)施例,本發(fā)明的消息隊(duì)列處理方法及裝置還提供了一休眠機(jī)制,當(dāng)判斷消息隊(duì)列中沒有待處理消息后,進(jìn)入休眠模式一段時間,暫停監(jiān)控作業(yè),從而避免了不必要的系統(tǒng)資源占用。
應(yīng)當(dāng)理解的是,以上的一般描述和后文的細(xì)節(jié)描述僅是示例性的,并不能限制本發(fā)明。
附圖說明
通過參照附圖詳細(xì)描述其示例實(shí)施例,本發(fā)明的上述和其它目標(biāo)、特征及優(yōu)點(diǎn)將變得更加顯而易見。
圖1是根據(jù)一示例性實(shí)施方式示出的一種消息隊(duì)列處理方法的流程圖。
圖2是根據(jù)一示例性實(shí)施方式示出的另一種消息隊(duì)列處理方法的流程圖。
圖3是根據(jù)一示例性實(shí)施方式示出的臨時運(yùn)行處理作業(yè)的流程圖。
圖4是根據(jù)一示例性實(shí)施方式示出的長運(yùn)行處理作業(yè)的流程圖。
圖5是根據(jù)一示例性實(shí)施方式示出的再一種消息隊(duì)列處理方法的流程圖。
圖6是根據(jù)一示例性實(shí)施方式示出的一種消息隊(duì)列處理裝置的框圖。
圖7是根據(jù)一示例性實(shí)施方式示出的另一種消息隊(duì)列處理裝置的框圖。
具體實(shí)施方式
現(xiàn)在將參考附圖更全面地描述示例實(shí)施方式。然而,示例實(shí)施方式能夠以多種形式實(shí)施,且不應(yīng)被理解為限于在此闡述的范例;相反,提 供這些實(shí)施方式使得本發(fā)明將更加全面和完整,并將示例實(shí)施方式的構(gòu)思全面地傳達(dá)給本領(lǐng)域的技術(shù)人員。附圖僅為本發(fā)明的示意性圖解,并非一定是按比例繪制。圖中相同的附圖標(biāo)記表示相同或類似的部分,因而將省略對它們的重復(fù)描述。
此外,所描述的特征、結(jié)構(gòu)或特性可以以任何合適的方式結(jié)合在一個或更多實(shí)施方式中。在下面的描述中,提供許多具體細(xì)節(jié)從而給出對本發(fā)明的實(shí)施方式的充分理解。然而,本領(lǐng)域技術(shù)人員將意識到,可以實(shí)踐本發(fā)明的技術(shù)方案而省略所述特定細(xì)節(jié)中的一個或更多,或者可以采用其它的方法、組元、裝置、步驟等。在其它情況下,不詳細(xì)示出或描述公知結(jié)構(gòu)、方法、裝置、實(shí)現(xiàn)或者操作以避免喧賓奪主而使得本發(fā)明的各方面變得模糊。
圖1是根據(jù)一示例性實(shí)施方式示出的一種消息隊(duì)列處理方法的流程圖。如圖1所示,消息隊(duì)列處理方法10包括:
在步驟S110中,啟動一監(jiān)控處理作業(yè),檢測消息隊(duì)列深度、消息隊(duì)列當(dāng)前所有運(yùn)行處理作業(yè)的狀態(tài)與數(shù)目及當(dāng)前CPU的利用率。
其中消息隊(duì)列深度為消息隊(duì)列中消息的數(shù)目。
消息隊(duì)列當(dāng)前所有運(yùn)行處理作業(yè)即可以包括長運(yùn)行處理作業(yè)和所有臨時運(yùn)行處理作業(yè),或者也可以僅為所有臨時運(yùn)行處理作業(yè)。
在步驟S120中,根據(jù)消息隊(duì)列的深度、消息隊(duì)列當(dāng)前所有運(yùn)行處理作業(yè)的狀態(tài)與數(shù)目及當(dāng)前CPU的利用率,確定是否啟動一新的臨時運(yùn)行處理作業(yè)。
本實(shí)施方式提供的消息隊(duì)列處理方法,能夠?qū)κ欠駟右恍碌呐R時運(yùn)行處理作業(yè)進(jìn)行判斷,從而避免了開啟大量臨時運(yùn)行處理作業(yè)而導(dǎo)致的浪費(fèi)系統(tǒng)資源及降低長運(yùn)行處理作業(yè)效率的問題,一方面可以提升消息隊(duì)列的處理效率,另一方面節(jié)省了系統(tǒng)資源。
應(yīng)清楚地理解,本發(fā)明描述了如何形成和使用特定示例,但本發(fā)明的原理不限于這些示例的任何細(xì)節(jié)。相反,基于本發(fā)明公開的內(nèi)容的教導(dǎo),這些原理能夠應(yīng)用于許多其它實(shí)施方式。
圖2是根據(jù)一示例性實(shí)施方式示出的另一種消息隊(duì)列處理方法的流 程圖。如圖2所示,消息隊(duì)列處理方法20包括:
在步驟S210中,判斷是否啟動監(jiān)控處理作業(yè),如果啟動監(jiān)控處理作業(yè),則執(zhí)行步驟S220,否則,執(zhí)行步驟S290。
其中判斷是否啟動監(jiān)控處理作業(yè)例如可以通過判斷一預(yù)設(shè)標(biāo)志的設(shè)置至來判斷,如該預(yù)設(shè)標(biāo)志為是(YES或TURE),則判斷啟動該監(jiān)控處理作業(yè);而如果該預(yù)設(shè)標(biāo)志設(shè)為否(NO或FALSE),則判斷不啟動該監(jiān)控作業(yè)?;蛘?,也可以設(shè)為否時,啟動該監(jiān)控作業(yè);而設(shè)為是時,不啟動該監(jiān)控作業(yè)。
該預(yù)設(shè)標(biāo)志可以認(rèn)為設(shè)定,也可以由其他應(yīng)用程序、函數(shù)等進(jìn)行設(shè)定等,本發(fā)明不以此為限。
此外,在圖1所述的消息隊(duì)列處理方法10中,也可以在步驟S110之前,判斷是否啟動監(jiān)控處理作業(yè),如果啟動監(jiān)控處理作業(yè),則執(zhí)行步驟S110;否則執(zhí)行長運(yùn)行處理作業(yè)。
在步驟S220中,判斷消息隊(duì)列深度是否超過新作業(yè)啟動閾值,如果超過該新作業(yè)啟動閾值,則執(zhí)行步驟S230;否則結(jié)束本方法。
其中,新作業(yè)啟動閾值可以為一預(yù)先設(shè)定的固定值,或者也可以為根據(jù)消息隊(duì)列處理情況和/或CPU利用率等情況動態(tài)設(shè)置的閾值,本發(fā)明不以此為限。
在步驟S230中,判斷消息隊(duì)列當(dāng)前所有運(yùn)行處理作業(yè)的數(shù)目是否超過作業(yè)總數(shù)閾值,如果未超過該作業(yè)總數(shù)閾值,則執(zhí)行步驟S240;否則結(jié)束本方法。
其中,作業(yè)總數(shù)閾值可以為一預(yù)先設(shè)定的固定值,或者也可以為根據(jù)消息隊(duì)列處理情況和/或CPU利用率等情況動態(tài)設(shè)置的閾值,本發(fā)明不以此為限。
其中,消息隊(duì)列當(dāng)前所有運(yùn)行處理作業(yè)即可以包括長運(yùn)行處理作業(yè)和所有臨時運(yùn)行處理作業(yè),或者也可以僅為所有臨時運(yùn)行處理作業(yè)。而針對這兩種情況,作業(yè)總數(shù)閾值的設(shè)定會有不同。
在步驟S240中,判斷當(dāng)前CPU利用率是否超過CPU利用率閾值,如果未超過該CPU利用率閾值,則執(zhí)行步驟S250;否則結(jié)束本方法。
其中,CPU利用率閾值可以為一預(yù)先設(shè)定的固定值,或者也可以為 根據(jù)消息隊(duì)列處理情況和/或CPU利用率等情況動態(tài)設(shè)置的閾值,本發(fā)明不以此為限。
在步驟S250中,啟動一新的臨時運(yùn)行處理作業(yè)。
在步驟S260中,執(zhí)行長運(yùn)行處理作業(yè)。
在一些實(shí)施例中,消息隊(duì)列處理方法20還可以包括:判斷消息隊(duì)列深度是否超過警戒深度閾值,如果超過該警戒深度閾值,則給消息隊(duì)列發(fā)送警告信息,從而對外發(fā)布短信通知。該步驟例如可以在步驟S220之前執(zhí)行,在發(fā)布警告信息后,繼續(xù)執(zhí)行步驟S220;而如果未超過該警戒深度閾值,則繼續(xù)執(zhí)行步驟S220?;蛘?,該步驟也可以在步驟S230之前執(zhí)行,在發(fā)布警告信息后,繼續(xù)執(zhí)行步驟S230;而如果未超過該警戒深度閾值,則繼續(xù)執(zhí)行步驟S230。再或者,該步驟還可以在步驟S240之前執(zhí)行,在發(fā)布警告信息后,繼續(xù)執(zhí)行步驟S240;而如果未超過該警戒深度閾值,則繼續(xù)執(zhí)行步驟S240。再或者,該步驟還可以在步驟S250之前執(zhí)行,在發(fā)布警告信息后,繼續(xù)執(zhí)行步驟S250;而如果未超過該警戒深度閾值,則繼續(xù)執(zhí)行步驟S250。此外,警戒深度閾值可以為一預(yù)先設(shè)定的固定值,或者也可以為根據(jù)消息隊(duì)列處理情況和/或CPU利用率等情況動態(tài)設(shè)置的閾值,本發(fā)明不以此為限。
在一些實(shí)施例中,消息隊(duì)列處理方法20還可以包括:判斷消息隊(duì)列當(dāng)前所有運(yùn)行處理作業(yè)的狀態(tài)是否均處于鎖狀態(tài)或消息等待狀態(tài),如果是,則給消息隊(duì)列發(fā)送警告信息,從而對外發(fā)布短信通知。該步驟例如可以在步驟S230之前執(zhí)行,在發(fā)布警告信息后,繼續(xù)執(zhí)行步驟S230;而如果判斷為否,則繼續(xù)執(zhí)行步驟S230?;蛘撸摬襟E也可以在步驟S220之前執(zhí)行,在發(fā)布警告信息后,繼續(xù)執(zhí)行步驟S220;而如果判斷為否,則繼續(xù)執(zhí)行步驟S220。再或者,該步驟還可以在步驟S240之前執(zhí)行,在發(fā)布警告信息后,繼續(xù)執(zhí)行步驟S240;而如果判斷為否,則繼續(xù)執(zhí)行步驟S240。再或者,該步驟還可以在步驟S250之前執(zhí)行,在發(fā)布警告信息后,繼續(xù)執(zhí)行步驟S250;而如果判斷為否,則繼續(xù)執(zhí)行步驟S250。其中,處理作業(yè)的鎖狀態(tài)和消息等待狀態(tài)為本領(lǐng)域技術(shù)人員所公知,在此不再贅述。
圖3是根據(jù)一示例性實(shí)施方式示出的臨時運(yùn)行處理作業(yè)的流程圖。 如圖3所示,臨時運(yùn)行處理作業(yè)流程包括:
在步驟S2510中,判斷消息隊(duì)列中是否還有消息待處理,如果還有消息待處理,則執(zhí)行步驟S2520;否則,結(jié)束臨時運(yùn)行處理作業(yè)。
在步驟S2520中,對消息隊(duì)列中的消息進(jìn)行處理,并返回步驟S2510。
圖4是根據(jù)一示例性實(shí)施方式示出的長運(yùn)行處理作業(yè)的流程圖。如圖4所示,長運(yùn)行處理作業(yè)流程包括:
在步驟S2610中,判斷消息隊(duì)列中是否還有消息待處理,如果還有消息待處理,則執(zhí)行步驟S2620;否則,執(zhí)行步驟S2640。
在步驟S2620中,判斷是否允許獲取消息隊(duì)列中的消息,如果允許獲取,則執(zhí)行步驟S2630;否則,結(jié)束長運(yùn)行處理作業(yè)。
在步驟S2630中,對消息隊(duì)列中的消息進(jìn)行處理,并返回步驟S2610。
在步驟S2640中,進(jìn)入無限等待模式,持續(xù)執(zhí)行步驟S2610中的判斷。
本實(shí)施方式提供的消息隊(duì)列處理方法,通過聯(lián)合參考消息隊(duì)列深度、消息隊(duì)列當(dāng)前所有運(yùn)行處理作業(yè)的狀態(tài)與數(shù)目及當(dāng)前CPU的利用率,來確定是否需要啟動新的臨時運(yùn)行處理作業(yè),從而避免了開啟大量臨時運(yùn)行處理作業(yè)而導(dǎo)致的浪費(fèi)系統(tǒng)資源及降低長運(yùn)行處理作業(yè)效率的問題,一方面可以提升消息隊(duì)列的處理效率,另一方面節(jié)省了系統(tǒng)資源。
圖5是根據(jù)一示例性實(shí)施方式示出的再一種消息隊(duì)列處理方法的流程圖。圖5所示的消息隊(duì)列處理方法30中的步驟S310~步驟S360與圖2所示的消息隊(duì)列處理方法20中的步驟S210~步驟S260相同,可參照對圖2所示的消息隊(duì)列處理方法20的說明,在此不再贅述。此外,消息隊(duì)列處理方法30還包括:
在步驟S370中,判斷消息隊(duì)列中是否還有消息待處理,如果還有消息待處理,則返回步驟S320;否則,執(zhí)行步驟S380。
在步驟S380中,暫停當(dāng)前監(jiān)控處理作業(yè),啟動休眠計(jì)時器,進(jìn)入休眠狀態(tài)。
當(dāng)休眠計(jì)時器到時,則返回監(jiān)控狀態(tài),返回步驟S320。
本實(shí)施方式提供的消息隊(duì)列處理方法,還提供了一休眠機(jī)制,當(dāng)判斷消息隊(duì)列中沒有待處理消息后,進(jìn)入休眠模式一段時間,暫停監(jiān)控作 業(yè),從而避免了不必要的系統(tǒng)資源占用。
需要注意的是,上述附圖僅是根據(jù)本發(fā)明示例性實(shí)施方式的方法所包括的處理的示意性說明,而不是限制目的。易于理解,上述附圖所示的處理并不表明或限制這些處理的時間順序。另外,也易于理解,這些處理可以是例如在多個模塊中同步或異步執(zhí)行的。
下述為本發(fā)明裝置實(shí)施例,可以用于執(zhí)行本發(fā)明方法實(shí)施例。對于本發(fā)明裝置實(shí)施例中未披露的細(xì)節(jié),請參照本發(fā)明方法實(shí)施例。
圖6是根據(jù)一示例性實(shí)施方式示出的一種消息隊(duì)列處理裝置的框圖。如圖6所示,消息隊(duì)列處理裝置40包括:消息隊(duì)列檢測模塊410以及臨時作業(yè)啟動確定模塊420。
其中消息隊(duì)列檢測模塊410用于檢測消息隊(duì)列深度、消息隊(duì)列當(dāng)前所有運(yùn)行處理作業(yè)的狀態(tài)與數(shù)目以及當(dāng)前CPU的利用率。
臨時作業(yè)啟動確定模塊420用于根據(jù)消息隊(duì)列檢測模塊410檢測到的消息隊(duì)列的深度、消息隊(duì)列當(dāng)前所有運(yùn)行處理作業(yè)的狀態(tài)與數(shù)目及當(dāng)前CPU的利用率,確定是否啟動一新的臨時運(yùn)行處理作業(yè)。
圖7是根據(jù)一示例性實(shí)施方式示出的另一種消息隊(duì)列處理裝置的框圖。如圖7所示,消息隊(duì)列處理裝置50包括:消息隊(duì)列檢測模塊510以及臨時作業(yè)啟動確定模塊520。
其中消息隊(duì)列檢測模塊510用于檢測消息隊(duì)列深度、消息隊(duì)列當(dāng)前所有運(yùn)行處理作業(yè)的狀態(tài)與數(shù)目以及當(dāng)前CPU的利用率。
臨時作業(yè)啟動確定模塊520包括:第一隊(duì)列深度判斷子模塊5204、第一作業(yè)狀態(tài)判斷子模塊5206、CPU利用率判斷子模塊5208以及臨時作業(yè)啟動子模塊5210。
其中,第一隊(duì)列深度判斷子模塊5204用于判斷消息隊(duì)列檢測模塊510檢測到的消息隊(duì)列深度是否超過新作業(yè)啟動閾值。
第一作業(yè)狀態(tài)判斷子模塊5206用于當(dāng)?shù)谝魂?duì)列深度判斷子模塊5204判斷消息隊(duì)列深度超過新作業(yè)啟動閾值時,判斷消息隊(duì)列檢測模塊510檢測到的消息隊(duì)列當(dāng)前所有運(yùn)行處理作業(yè)數(shù)目是否超過作業(yè)總數(shù)閾值。
CPU利用率判斷子模塊5208用于當(dāng)?shù)谝蛔鳂I(yè)狀態(tài)判斷子模塊5206判斷消息隊(duì)列當(dāng)前所有運(yùn)行處理作業(yè)數(shù)目未超過作業(yè)總數(shù)閾值時,判斷消息隊(duì)列檢測模塊510檢測到的CPU利用率是否超過CPU利用閾值。
臨時作業(yè)啟動子模塊5210用于當(dāng)CPU利用率判斷子模塊5208判斷CPU利用率未超過CPU利用閾值時,啟動一新的臨時運(yùn)行處理作業(yè)。
在一些實(shí)施例中,臨時作業(yè)啟動確定模塊520還可以包括:消息判斷子模塊5212及休眠子模塊5214。
其中,消息判斷子模塊5212用于當(dāng)臨時作業(yè)啟動子模塊5210啟動一新的臨時運(yùn)行處理作業(yè)后,判斷消息隊(duì)列中是否還有消息待處理。
休眠子模塊5214用于當(dāng)消息判斷子模塊5212判斷消息隊(duì)列中沒有消息待處理時,暫停當(dāng)前監(jiān)控處理作業(yè),啟動休眠計(jì)時器,進(jìn)入休眠狀態(tài)。
在一些實(shí)施例中,臨時作業(yè)啟動確定模塊520還可以包括:第二隊(duì)列深度子模塊及第一報警子模塊。
其中,第二隊(duì)列深度子模塊用于判斷消息隊(duì)列檢測模塊510檢測到的消息隊(duì)列深度是否超過警戒深度閾值。
第一報警子模塊用于當(dāng)?shù)诙?duì)列深度子模塊判斷消息隊(duì)列超過警戒深度閾值時,給消息隊(duì)列發(fā)送警告信息,從而對外發(fā)布短信通知。
在一些實(shí)施例中,臨時作業(yè)啟動確定模塊520還可以包括:第二作業(yè)狀態(tài)判斷子模塊及第二報警子模塊。
其中,第二作業(yè)狀態(tài)判斷子模塊用于判斷消息隊(duì)列檢測模塊510檢測到的消息隊(duì)列當(dāng)前所有運(yùn)行處理作業(yè)的狀態(tài)是否均處于鎖狀態(tài)或消息等待狀態(tài)。
第二報警子模塊用于當(dāng)?shù)诙鳂I(yè)狀態(tài)判斷子模塊判斷消息隊(duì)列當(dāng)前所有運(yùn)行處理作業(yè)的狀態(tài)均處于鎖狀態(tài)或消息等待狀態(tài)時,給消息隊(duì)列發(fā)送警告信息,從而對外發(fā)布短信通知。
在一些實(shí)施例中,消息隊(duì)列處理裝置50還可以包括:監(jiān)控作業(yè)判斷模塊530,用于通過預(yù)設(shè)標(biāo)志的設(shè)置來判斷啟動監(jiān)控處理作業(yè)還是啟動長運(yùn)行處理作業(yè)。
此外,消息隊(duì)列處理裝置40中也可以包括該監(jiān)控作業(yè)判斷模塊,從 而通過預(yù)設(shè)標(biāo)志的設(shè)置來判斷啟動監(jiān)控處理作業(yè)還是啟動長運(yùn)行處理作業(yè)。
需要注意的是,上述附圖中所示的框圖是功能實(shí)體,不一定必須與物理或邏輯上獨(dú)立的實(shí)體相對應(yīng)。可以采用軟件形式來實(shí)現(xiàn)這些功能實(shí)體,或在一個或多個硬件模塊或集成電路中實(shí)現(xiàn)這些功能實(shí)體,或在不同網(wǎng)絡(luò)和/或處理器裝置和/或微控制器裝置中實(shí)現(xiàn)這些功能實(shí)體。
通過以上的實(shí)施方式的描述,本領(lǐng)域的技術(shù)人員易于理解,這里描述的示例實(shí)施方式可以通過軟件實(shí)現(xiàn),也可以通過軟件結(jié)合必要的硬件的方式來實(shí)現(xiàn)。因此,根據(jù)本發(fā)明實(shí)施方式的技術(shù)方案可以以軟件產(chǎn)品的形式體現(xiàn)出來,該軟件產(chǎn)品可以存儲在一個非易失性存儲介質(zhì)(可以是CD-ROM,U盤,移動硬盤等)中或網(wǎng)絡(luò)上,包括若干指令以使得一臺計(jì)算設(shè)備(可以是個人計(jì)算機(jī)、服務(wù)器、移動終端、或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行根據(jù)本發(fā)明實(shí)施方式的方法。
以上具體地示出和描述了本發(fā)明的示例性實(shí)施方式。應(yīng)可理解的是,本發(fā)明不限于這里描述的詳細(xì)結(jié)構(gòu)、設(shè)置方式或?qū)崿F(xiàn)方法;相反,本發(fā)明意圖涵蓋包含在所附權(quán)利要求的精神和范圍內(nèi)的各種修改和等效設(shè)置。