亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種消息處理方法及裝置與流程

文檔序號(hào):12037934閱讀:220來源:國知局
一種消息處理方法及裝置與流程

本申請(qǐng)涉及數(shù)據(jù)處理領(lǐng)域,特別是涉及一種消息處理方法,以及一種消息處理裝置。



背景技術(shù):

目前,服務(wù)器集群針對(duì)大規(guī)模消息通常采用異步處理的方式。這種方式主要存在以下問題:

一方面,由于集群中各虛擬機(jī)的處理能力有差異,以相同速度從messagebroker上拉取消息時(shí),很容易在處理能力低下的虛擬機(jī)上已經(jīng)開始出現(xiàn)緩慢堆積,但處理性能卓越的虛擬機(jī)又處于閑置狀態(tài),因此存在消息分配不合理,資源利用不充分的問題。

另一方面,在異步消息的處理架構(gòu)中,經(jīng)常出現(xiàn)消息處理能力落后于消息產(chǎn)生能力的情況,從而會(huì)在存儲(chǔ)并分發(fā)消息的消息中間件messagebroker上出現(xiàn)消息堆積,甚至?xí)沟胢essagebroker為了保證其自身運(yùn)作正常,主動(dòng)進(jìn)行消息丟棄,導(dǎo)致消息漏掉未處理。



技術(shù)實(shí)現(xiàn)要素:

鑒于上述問題,提出了本申請(qǐng)實(shí)施例以便提供一種克服上述問題或者至少部分地解決上述問題的消息處理方法和裝置。

為了解決上述問題,本申請(qǐng)公開了一種消息處理方法,包括:

對(duì)虛擬機(jī)的未處理消息進(jìn)行監(jiān)控;

當(dāng)檢測到未處理消息超出所述虛擬機(jī)的負(fù)載上限時(shí),切斷消息拉取。

優(yōu)選地,在所述對(duì)虛擬機(jī)的未處理消息進(jìn)行監(jiān)控之前,所述方法還包括:

從分發(fā)消息的消息中間件拉取消息。

優(yōu)選地,在所述從分發(fā)消息的消息中間件拉取消息之前,所述方法還包括:

訂閱所述消息中間件的消息緩存主隊(duì)列;

所述從分發(fā)消息的消息中間件拉取消息包括:

在接收到所述消息緩存主隊(duì)列的消息通知后,從所述消息緩存主隊(duì)列中拉取消息。

優(yōu)選地,所述切斷消息拉取包括:

切斷對(duì)所述消息緩存主隊(duì)列的消息訂閱,以切斷消息拉取。

優(yōu)選地,所述方法還包括:

當(dāng)檢測到所述未處理消息低于所述虛擬機(jī)的負(fù)載下限時(shí),恢復(fù)消息拉取。

優(yōu)選地,所述恢復(fù)消息拉取包括:

恢復(fù)對(duì)所述消息緩存主隊(duì)列的消息訂閱,以恢復(fù)消息拉取。

優(yōu)選地,所述檢測到所述未處理消息超出所述虛擬機(jī)的負(fù)載上限包括:

檢測到所述未處理消息所占用緩存超出第一配置值;

所述檢測到所述未處理消息低于所述虛擬機(jī)的負(fù)載下限包括:

檢測到所述未處理消息所占用緩存低于第二配置值。

優(yōu)選地,在所述從分發(fā)消息的消息中間件拉取消息之后,所述方法還包括:

將拉取的多個(gè)消息存儲(chǔ)至預(yù)先構(gòu)建的消息緩存子隊(duì)列中。

優(yōu)選地,所述方法還包括:

采用多個(gè)異步線程進(jìn)行消息處理。

優(yōu)選地,在所述從分發(fā)消息的消息中間件拉取消息之后,所述方法還包括:

通知所述消息中間件刪除已拉取的未處理消息;

或,通知所述消息中間件對(duì)已拉取的未處理消息添加已處理標(biāo)識(shí)。

優(yōu)選地,所述方法還包括:

檢測所述虛擬機(jī)的各項(xiàng)資源參數(shù),并根據(jù)檢測結(jié)果對(duì)所述虛擬機(jī)設(shè)置第一配置值和第二配置值。

本申請(qǐng)還提供了一種消息處理裝置,包括:

消息監(jiān)控模塊,用于對(duì)虛擬機(jī)的未處理消息進(jìn)行監(jiān)控。

消息拉取控制模塊,用于當(dāng)檢測到未處理消息超出所述虛擬機(jī)的負(fù)載上限時(shí),切斷消息拉取。

優(yōu)選地,所述裝置還包括:

消息拉取模塊,用于在所述對(duì)虛擬機(jī)的未處理消息進(jìn)行監(jiān)控之前,從分發(fā)消息的消息中間件拉取消息;

優(yōu)選地,所述裝置還包括:

消息訂閱模塊,用于在所述從分發(fā)消息的消息中間件拉取消息之前,訂閱所述消息中間件的消息緩存主隊(duì)列;

所述消息拉取模塊,具體用于在接收到所述消息緩存主隊(duì)列的消息通知后,從所述消息緩存主隊(duì)列中拉取消息。

優(yōu)選地,所述消息拉取控制模塊包括:

訂閱切斷子模塊,用于切斷對(duì)所述消息緩存主隊(duì)列的消息訂閱,以切斷消息拉取。

優(yōu)選地,所述消息拉取控制模塊,還用于當(dāng)檢測到所述未處理消息低于所述虛擬機(jī)的負(fù)載下限時(shí),恢復(fù)消息拉取。

優(yōu)選地,所述消息拉取控制模塊還包括:

訂閱恢復(fù)子模塊,用于恢復(fù)對(duì)所述消息緩存主隊(duì)列的消息訂閱,以恢復(fù)消息拉取。

優(yōu)選地,所述消息拉取控制模塊,具體用于當(dāng)檢測到所述未處理消息所占用緩存超出第一配置值時(shí),切斷消息拉取;當(dāng)檢測到所述未處理消息所占用緩存低于第二配置值時(shí),恢復(fù)消息拉取。

優(yōu)選地,所述裝置還包括:

消息存儲(chǔ)模塊,用于在所述從分發(fā)消息的消息中間件拉取消息之后,將拉取的多個(gè)消息存儲(chǔ)至預(yù)先構(gòu)建的消息緩存子隊(duì)列中。

優(yōu)選地,所述裝置還包括:

消息處理模塊,用于采用多個(gè)異步線程進(jìn)行消息處理。

本申請(qǐng)實(shí)施例包括以下優(yōu)點(diǎn):

依據(jù)本申請(qǐng)實(shí)施例,實(shí)時(shí)統(tǒng)計(jì)虛擬機(jī)的未處理消息,若檢測到未處理消 息超出虛擬機(jī)的負(fù)載上限,則切換消息拉取,避免在虛擬機(jī)上出現(xiàn)消息堆積。相應(yīng)的,若檢測到未處理消息低于虛擬機(jī)的負(fù)載下限,則恢復(fù)消息拉取,以實(shí)現(xiàn)對(duì)虛擬機(jī)處理資源的充分利用。通過上述方案可以根據(jù)服務(wù)器集群中各虛擬機(jī)的實(shí)際負(fù)載能力進(jìn)行消息拉取,可以將消息更多的分配到負(fù)載能力較好的虛擬機(jī),在充分有效利用處理資源的同時(shí),可以提高消息的整體處理效率。

并且,本申請(qǐng)實(shí)施例中,還可以采用消息緩存子隊(duì)列緩存從消息中間件的消息緩存主隊(duì)列中拉取的消息,并在拉取消息之后,通知消息中間件刪除已拉取的消息,或是標(biāo)記為已處理,從而有效緩解了消息中間件的存儲(chǔ)壓力,避免消息中間件上出現(xiàn)消息堆積以及消息漏掉未處理的問題。

附圖說明

圖1是本申請(qǐng)的一種消息處理方法實(shí)施例1的步驟流程圖;

圖2是本申請(qǐng)的一種消息處理方法實(shí)施例2的步驟流程圖;

圖3是背景技術(shù)的異步消息處理架構(gòu)圖;

圖4是應(yīng)用本申請(qǐng)實(shí)施例的異步消息處理架構(gòu)圖;

圖5是本申請(qǐng)實(shí)施例中切斷消息訂閱的示意圖;

圖6是本申請(qǐng)實(shí)施例中恢復(fù)消息訂閱的示意圖;

圖7是本申請(qǐng)的一種消息處理裝置實(shí)施例的結(jié)構(gòu)框圖。

具體實(shí)施方式

為使本申請(qǐng)的上述目的、特征和優(yōu)點(diǎn)能夠更加明顯易懂,下面結(jié)合附圖和具體實(shí)施方式對(duì)本申請(qǐng)作進(jìn)一步詳細(xì)的說明。

實(shí)施例1

參照?qǐng)D1,示出了本申請(qǐng)的一種消息處理方法實(shí)施例1的步驟流程圖,具體可以包括如下步驟:

步驟101,對(duì)虛擬機(jī)的未處理消息進(jìn)行監(jiān)控。

本申請(qǐng)實(shí)施例可以應(yīng)用于服務(wù)器集群中執(zhí)行異步消息處理的各個(gè)虛擬機(jī),服務(wù)器集群中部署有多個(gè)虛擬機(jī),用于對(duì)待處理的大規(guī)模消息進(jìn)行異步 處理。本申請(qǐng)實(shí)施例針對(duì)各個(gè)虛擬機(jī)的未處理消息進(jìn)行監(jiān)控,以用于進(jìn)一步的判斷。

步驟102,當(dāng)檢測到未處理消息超出所述虛擬機(jī)的負(fù)載上限時(shí),切斷消息拉取。

此處虛擬機(jī)的負(fù)載上限可以表征虛擬機(jī)的平均負(fù)載能力或是最大負(fù)載能力,可以是根據(jù)虛擬機(jī)當(dāng)前負(fù)載能力來配置,例如根據(jù)對(duì)虛擬機(jī)當(dāng)前各項(xiàng)資源參數(shù)的檢測結(jié)果配置該負(fù)載上限;也可以根據(jù)虛擬機(jī)的歷史正常負(fù)載能力來配置,具體可以通過消息對(duì)歷史負(fù)載數(shù)據(jù)統(tǒng)計(jì)得到該負(fù)載上限,例如取歷史負(fù)載數(shù)據(jù)的均值或是最大值;可以是根據(jù)經(jīng)驗(yàn)設(shè)定的期望值,還可以采用其他任意適用的方式配置。

負(fù)載上限可以有多種表示形式。例如,采用消息的個(gè)數(shù)表示,或是采用消息的資源占用量來表示,例如消息所占用的cpu資源、存儲(chǔ)資源(例如緩存資源)、帶寬資源等至少一種。還可以是其他任意適用的表示形式,本申請(qǐng)對(duì)此并不做限制。

采用消息個(gè)數(shù)表示時(shí),可以直接將未處理消息與負(fù)載上限進(jìn)行比較。

采用資源占用量表示時(shí),具體根據(jù)未處理消息進(jìn)行比較時(shí),可以計(jì)算未處理消息實(shí)際的資源占用量或是預(yù)估的資源占用量,并將計(jì)算結(jié)果與負(fù)載上限進(jìn)行比較,計(jì)算結(jié)果高于該負(fù)載上限,也即是未處理消息高于負(fù)載上限;或是根據(jù)負(fù)載上限計(jì)算相應(yīng)的消息個(gè)數(shù),將未處理消息的個(gè)數(shù)與計(jì)算的消息個(gè)數(shù)進(jìn)行比較,未處理消息的個(gè)數(shù)高于計(jì)算的消息個(gè)數(shù),也即是未處理消息高于負(fù)載上限。

若檢測到未處理消息超出虛擬機(jī)的負(fù)載上限,則切斷消息拉取,以避免在虛擬機(jī)上出現(xiàn)消息堆積。切斷消息拉取可以有多種實(shí)現(xiàn)方式,例如切斷對(duì)消息中間件的訂閱,或是攔截或通過設(shè)置限制對(duì)消息拉取動(dòng)作等。

在本申請(qǐng)的優(yōu)選實(shí)施例中,還可以當(dāng)檢測到未處理消息低于所述虛擬機(jī)的負(fù)載下限時(shí),恢復(fù)消息拉取。

此處虛擬機(jī)的負(fù)載下限可以表征虛擬機(jī)的平均負(fù)載能力或是最小負(fù)載能力,需要保證其小于負(fù)載上限。具體可以是根據(jù)虛擬機(jī)當(dāng)前負(fù)載能力來配 置,例如根據(jù)對(duì)虛擬機(jī)當(dāng)前各項(xiàng)資源參數(shù)的檢測結(jié)果配置該負(fù)載下限;也可以根據(jù)虛擬機(jī)的歷史正常負(fù)載能力來配置,具體可以通過消息對(duì)歷史負(fù)載數(shù)據(jù)統(tǒng)計(jì)得到該負(fù)載下限,例如取歷史負(fù)載數(shù)據(jù)的均值或是最小值;可以是根據(jù)經(jīng)驗(yàn)設(shè)定的期望值,還可以采用其他任意適用的方式配置。

負(fù)載下限可以有多種表示形式,例如,采用消息的個(gè)數(shù)表示,或是采用消息的資源占用量來表示,例如消息所占用的cpu資源、存儲(chǔ)資源(例如緩存資源)、帶寬資源等至少一種。還可以是其他任意適用的表示形式,本申請(qǐng)對(duì)此并不做限制。

采用消息個(gè)數(shù)表示時(shí),可以直接將未處理消息與負(fù)載下限進(jìn)行比較。

采用資源占用量表示時(shí),具體根據(jù)未處理消息進(jìn)行比較時(shí),可以計(jì)算未處理消息實(shí)際的資源占用量或是預(yù)估的資源占用量,并將計(jì)算結(jié)果與負(fù)載下限進(jìn)行比較,計(jì)算結(jié)果低于該負(fù)載下限,也即是未處理消息低于負(fù)載下限;或是根據(jù)負(fù)載下限計(jì)算相應(yīng)的消息個(gè)數(shù),將未處理消息的個(gè)數(shù)與計(jì)算的消息個(gè)數(shù)進(jìn)行比較,未處理消息的個(gè)數(shù)低于計(jì)算的消息個(gè)數(shù),也即是未處理消息低于負(fù)載下限。

依據(jù)本申請(qǐng)實(shí)施例,若檢測到未處理消息低于所述虛擬機(jī)的負(fù)載下限,則恢復(fù)消息拉取,以實(shí)現(xiàn)對(duì)虛擬機(jī)處理資源的充分利用。

其中,恢復(fù)消息拉取可以有多種實(shí)現(xiàn)方式,例如恢復(fù)對(duì)消息中間件的訂閱,或是解除對(duì)消息拉取動(dòng)作的攔截或限制等。

通過上述方案可以根據(jù)服務(wù)器集群中各虛擬機(jī)的實(shí)際負(fù)載能力進(jìn)行消息拉取,可以將消息更多的分配到負(fù)載能力較好的虛擬機(jī),在充分有效利用處理資源的同時(shí),可以提高消息的整體處理效率。

本申請(qǐng)實(shí)施例中,優(yōu)選的,虛擬機(jī)處理的消息可以來源于消息中間件,該消息中間件用于向服務(wù)器集群中的各個(gè)虛擬機(jī)分發(fā)消息。具體可以從分發(fā)消息的消息中間件拉取消息。

待處理的消息在生成后即存儲(chǔ)至消息中間件,由消息中間件分發(fā)至各個(gè)虛擬機(jī)。其中,消息可以從對(duì)虛擬機(jī)上程序服務(wù)的訪問請(qǐng)求中抽取,或是有其他的來源,本申請(qǐng)對(duì)此并不做限制。

本申請(qǐng)實(shí)施例中,各個(gè)虛擬機(jī)從消息中間件拉取消息,拉取的消息可以是消息中間件分配給該虛擬機(jī)處理的消息,具體的分配方式本申請(qǐng)并不做限制,例如,可以按照各個(gè)虛擬機(jī)的編號(hào)或是預(yù)先排定各個(gè)虛擬機(jī)的優(yōu)先級(jí),將待處理的任務(wù)按序分配給各個(gè)虛擬機(jī),或是按照預(yù)先設(shè)定的消息類型與虛擬機(jī)的對(duì)應(yīng)關(guān)系進(jìn)行分配,還可以按照預(yù)設(shè)的算法進(jìn)行分配;拉取的消息也可以是按照虛擬機(jī)拉取消息的請(qǐng)求,實(shí)行先到先得,將待處理的消息分配給先發(fā)送請(qǐng)求的虛擬機(jī)。

虛擬機(jī)拉取消息后便可以進(jìn)一步執(zhí)行對(duì)消息的處理,針對(duì)大規(guī)模消息處理的場景,拉取的消息較多,優(yōu)選處理的方式是采用異步線程池中多個(gè)異步線程進(jìn)行消息處理,相比于同步處理的方式可以大大提高消息處理的效率。

其中,消息中間件可以是messagebroker,也可以是其他任意適用的、實(shí)現(xiàn)消息分發(fā)功能的消息中間件,例如activemessenger。

實(shí)施例2

參照?qǐng)D2,示出了本申請(qǐng)的一種消息處理方法實(shí)施例2的步驟流程圖,應(yīng)用于服務(wù)器集群中執(zhí)行異步消息處理的各個(gè)虛擬機(jī),具體可以包括如下步驟:

步驟201,訂閱消息中間件的消息緩存主隊(duì)列。

消息中間件可以采用消息緩存主隊(duì)列保存待處理的所有消息,可以通過訂閱該消息緩存主隊(duì)列以獲知新消息。

訂閱是消息的一種傳遞機(jī)制,包括一個(gè)消息的發(fā)布者和多個(gè)訂閱者,應(yīng)用到本申請(qǐng)實(shí)施例,也即是消息發(fā)布者也即是消息中間件,消息訂閱者也即是各個(gè)虛擬機(jī)。優(yōu)選地,在訂閱消息時(shí),還可以訂閱具體優(yōu)選處理的消息類型,以使消息中間件在檢測到該類型的消息時(shí)通知對(duì)應(yīng)的虛擬機(jī)。

步驟202,在接收到所述消息緩存主隊(duì)列的消息通知后,從所述消息緩存主隊(duì)列中拉取消息,將拉取的多個(gè)消息存儲(chǔ)至預(yù)先構(gòu)建的消息緩存子隊(duì)列中。

訂閱所述消息中間件的消息緩存主隊(duì)列后,消息緩存隊(duì)列進(jìn)行新消息的 通知,在接收到所述消息緩存主隊(duì)列的消息通知后,再從所述消息緩存主隊(duì)列中拉取消息。

本申請(qǐng)實(shí)施例中,采用分層緩存的方式,從消息中間件的消息緩存主隊(duì)列中拉取的消息緩存至虛擬機(jī)本地的消息緩存子隊(duì)列。

步驟203,通知所述消息中間件刪除已拉取的未處理消息;或,通知所述消息中間件對(duì)已拉取的未處理消息添加已處理標(biāo)識(shí)。

將消息緩存至虛擬機(jī)本地的消息緩存子隊(duì)列后,可以進(jìn)一步通知消息中間件刪除已拉取的消息,或是標(biāo)記為已處理,從而有效緩解了消息中間件的存儲(chǔ)壓力,避免消息中間件上出現(xiàn)消息堆積以及消息漏掉未處理的問題。

在本申請(qǐng)的另一種優(yōu)選實(shí)施例中,本步驟也可以在由消息中間件主動(dòng)執(zhí)行,根據(jù)虛擬機(jī)拉取消息的請(qǐng)求將消息分配至虛擬機(jī)后,可以從消息緩存主隊(duì)中刪除已分配的消息,或是對(duì)已分配的消息添加已分配標(biāo)識(shí)。

步驟204,執(zhí)行消息處理。

步驟205,對(duì)所述虛擬機(jī)的未處理消息進(jìn)行監(jiān)控。

具體可以是對(duì)消息緩存子隊(duì)列中的未處理消息進(jìn)行監(jiān)控,具體可以是監(jiān)控未處理消息的個(gè)數(shù),也可以是監(jiān)控未處理消息的資源占用量,具體可以與負(fù)載上限或負(fù)載下限的表示方式可以一致,也可以不一致。進(jìn)行比較時(shí),可以換算為對(duì)應(yīng)消息的個(gè)數(shù)進(jìn)行比較,也可以換算為對(duì)應(yīng)的資源占用量進(jìn)行比較。

步驟206,當(dāng)檢測到所述消息緩存子隊(duì)列中所述未處理消息所占用緩存超出第一配置值時(shí),切斷對(duì)所述消息緩存主隊(duì)列的消息訂閱,以切斷消息拉取。

本實(shí)施例中,負(fù)載上限表示為消息占用的緩存大小,記為第一配置值,相應(yīng)的,所述檢測到未處理消息超出虛擬機(jī)的負(fù)載上限可以包括:檢測到所述消息緩存子隊(duì)列中所述未處理消息所占用緩存超出第一配置值。

本實(shí)施例中,切斷消息拉取通過切斷對(duì)消息緩存主隊(duì)列的訂閱實(shí)現(xiàn)。

步驟207,當(dāng)檢測到所述消息緩存子隊(duì)列中所述未處理消息所占用緩存低于第二配置值時(shí),恢復(fù)對(duì)所述消息緩存主隊(duì)列的消息訂閱,以恢復(fù)消息拉 取。

本實(shí)施例中,負(fù)載下限表示為消息占用的緩存大小,記為第二配置值,相應(yīng)的,所述檢測到未處理消息低于所述虛擬機(jī)的負(fù)載下限可以包括:檢測到所述消息緩存子隊(duì)列中所述未處理消息所占用緩存低于第二配置值。

本實(shí)施例中,恢復(fù)消息拉取通過恢復(fù)對(duì)消息緩存主隊(duì)列的訂閱實(shí)現(xiàn)。

進(jìn)一步優(yōu)選地,可以通過檢測所述虛擬機(jī)的各項(xiàng)資源參數(shù),例如cpu、存儲(chǔ)空間(例如緩存空間)、帶寬等至少一種。進(jìn)一步根據(jù)檢測結(jié)果對(duì)所述虛擬機(jī)設(shè)置第一配置值和第二配置值,具體的設(shè)置方式可以根據(jù)實(shí)際需求選擇,例如第一配置值設(shè)置為資源參數(shù)的80%,第二配置值設(shè)置為資源參數(shù)的30%。例如,檢測到虛擬機(jī)的緩存空間為100m,則對(duì)應(yīng)第一配置值設(shè)置為80m,第二配置值設(shè)置為30m。

依據(jù)本申請(qǐng)實(shí)施例,實(shí)時(shí)統(tǒng)計(jì)虛擬機(jī)的未處理消息,若檢測到未處理消息超出虛擬機(jī)的負(fù)載上限,則切換消息拉取,避免在虛擬機(jī)上出現(xiàn)消息堆積。相應(yīng)的,若檢測到未處理消息低于所述虛擬機(jī)的負(fù)載下限,則恢復(fù)消息拉取,以實(shí)現(xiàn)對(duì)虛擬機(jī)處理資源的充分利用。通過上述方案可以根據(jù)服務(wù)器集群中各虛擬機(jī)的實(shí)際負(fù)載能力進(jìn)行消息拉取,可以將消息更多的分配到負(fù)載能力較好的虛擬機(jī),在充分有效利用處理資源的同時(shí),可以提高消息的整體處理效率。

并且,本申請(qǐng)實(shí)施例中,還可以采用消息緩存子隊(duì)列緩存從消息中間件的消息緩存主隊(duì)列中拉取的消息,并在拉取消息之后,通知消息中間件刪除已拉取的消息,或是標(biāo)記為已處理,從而有效緩解了消息中間件的存儲(chǔ)壓力,避免消息中間件上出現(xiàn)消息堆積以及消息漏掉未處理的問題。

為更好地說明本申請(qǐng)實(shí)施例,以下對(duì)本申請(qǐng)與背景技術(shù)的方案進(jìn)行對(duì)比。如圖3示出了背景技術(shù)的異步消息處理架構(gòu)圖。通過messagebroker向多個(gè)虛擬機(jī)(vm_1~vm_n)分發(fā)消息,messagebroker采用集中緩存存儲(chǔ)未處理的所有消息。這種方案存在消息分配不合理、資源利用不充分、消息堆積以及可能的消息漏掉未處理的問題。

如圖4示出了應(yīng)用本申請(qǐng)實(shí)施例的異步消息處理架構(gòu)圖。一方面,通過 分層緩存隊(duì)列的設(shè)計(jì),在消費(fèi)端構(gòu)建本地緩存隊(duì)列,messagebroker的集中緩存移至本地,從而有效緩解了消息中間件的存儲(chǔ)壓力,避免消息中間件上出現(xiàn)消息堆積以及消息漏掉未處理的問題。

圖5示出了本申請(qǐng)實(shí)施例中切斷消息訂閱的示意圖,當(dāng)某個(gè)虛擬機(jī)上出現(xiàn)消息堆積,確定本地已緩存的消息總量,即緩存大小大于配置值1時(shí),則動(dòng)態(tài)切斷消息訂閱,避免在虛擬機(jī)上出現(xiàn)消息堆積。圖6示出了本申請(qǐng)實(shí)施例中恢復(fù)消息訂閱的示意圖,切斷訂閱后,不會(huì)從messagebroker拉取消息,但會(huì)持續(xù)處理本地緩存隊(duì)列的消息,當(dāng)某個(gè)虛擬機(jī)上本地已緩存的消息總量,即緩存大小小于預(yù)設(shè)的配置值2時(shí),則動(dòng)態(tài)恢復(fù)消息訂閱,見虛線所示,以實(shí)現(xiàn)對(duì)虛擬機(jī)處理資源的充分利用。由此可見,相比于背景技術(shù)的方案,本申請(qǐng)可以根據(jù)服務(wù)器集群中各虛擬機(jī)的實(shí)際負(fù)載能力進(jìn)行消息拉取,可以將消息更多的分配到負(fù)載能力較好的虛擬機(jī),在充分有效利用處理資源的同時(shí),可以提高消息的整體處理效率。

需要說明的是,對(duì)于方法實(shí)施例,為了簡單描述,故將其都表述為一系列的動(dòng)作組合,但是本領(lǐng)域技術(shù)人員應(yīng)該知悉,本申請(qǐng)實(shí)施例并不受所描述的動(dòng)作順序的限制,因?yàn)橐罁?jù)本申請(qǐng)實(shí)施例,某些步驟可以采用其他順序或者同時(shí)進(jìn)行。其次,本領(lǐng)域技術(shù)人員也應(yīng)該知悉,說明書中所描述的實(shí)施例均屬于優(yōu)選實(shí)施例,所涉及的動(dòng)作并不一定是本申請(qǐng)實(shí)施例所必須的。

實(shí)施例3

參照?qǐng)D7,示出了本申請(qǐng)的一種消息處理裝置實(shí)施例的結(jié)構(gòu)框圖,部署于服務(wù)器集群中執(zhí)行異步消息處理的各個(gè)虛擬機(jī),具體可以包括如下模塊:

消息監(jiān)控模塊301,用于對(duì)虛擬機(jī)的未處理消息進(jìn)行監(jiān)控。

消息拉取控制模塊302,用于當(dāng)檢測到未處理消息超出所述虛擬機(jī)的負(fù)載上限時(shí),切斷消息拉取。

本申請(qǐng)實(shí)施例中,優(yōu)選地,所述裝置還包括:

消息拉取模塊,用于在所述對(duì)虛擬機(jī)的未處理消息進(jìn)行監(jiān)控之前,從分 發(fā)消息的消息中間件拉取消息;

本申請(qǐng)實(shí)施例中,優(yōu)選地,所述裝置還包括:

消息訂閱模塊,用于在所述從分發(fā)消息的消息中間件拉取消息之前,訂閱所述消息中間件的消息緩存主隊(duì)列;

所述消息拉取模塊,具體用于在接收到所述消息緩存主隊(duì)列的消息通知后,從所述消息緩存主隊(duì)列中拉取消息。

本申請(qǐng)實(shí)施例中,優(yōu)選地,所述消息拉取控制模塊包括:

訂閱切斷子模塊,用于切斷對(duì)所述消息緩存主隊(duì)列的消息訂閱,以切斷消息拉取。

本申請(qǐng)實(shí)施例中,優(yōu)選地,所述消息拉取控制模塊,還用于當(dāng)檢測到所述未處理消息低于所述虛擬機(jī)的負(fù)載下限時(shí),恢復(fù)消息拉取。

本申請(qǐng)實(shí)施例中,優(yōu)選地,所述消息拉取控制模塊還包括:

訂閱恢復(fù)子模塊,用于恢復(fù)對(duì)所述消息緩存主隊(duì)列的消息訂閱,以恢復(fù)消息拉取。

本申請(qǐng)實(shí)施例中,優(yōu)選地,所述消息拉取控制模塊,具體用于當(dāng)檢測到所述未處理消息所占用緩存超出第一配置值時(shí),切斷消息拉??;當(dāng)檢測到所述未處理消息所占用緩存低于第二配置值時(shí),恢復(fù)消息拉取。

本申請(qǐng)實(shí)施例中,優(yōu)選地,所述裝置還包括:

消息存儲(chǔ)模塊,用于在所述從分發(fā)消息的消息中間件拉取消息之后,將拉取的多個(gè)消息存儲(chǔ)至預(yù)先構(gòu)建的消息緩存子隊(duì)列中。

本申請(qǐng)實(shí)施例中,優(yōu)選地,所述裝置還包括:

消息處理模塊,用于采用多個(gè)異步線程進(jìn)行消息處理。

本申請(qǐng)實(shí)施例中,優(yōu)選地,所述裝置還包括:

通知模塊,用于在所述從消息中間件拉取消息之后,通知所述消息中間件刪除已拉取的未處理消息;或,通知所述消息中間件對(duì)已拉取的未處理消息添加已處理標(biāo)識(shí)。

本申請(qǐng)實(shí)施例中,優(yōu)選地,所述裝置還包括:

參數(shù)檢測模塊,用于檢測所述虛擬機(jī)的各項(xiàng)資源參數(shù),并根據(jù)檢測結(jié)果 對(duì)所述虛擬機(jī)設(shè)置第一配置值和第二配置值。

依據(jù)本申請(qǐng)實(shí)施例,實(shí)時(shí)統(tǒng)計(jì)虛擬機(jī)的未處理消息,若檢測到未處理消息超出虛擬機(jī)的負(fù)載上限,則切換消息拉取,避免在虛擬機(jī)上出現(xiàn)消息堆積。相應(yīng)的,若檢測到未處理消息低于所述虛擬機(jī)的負(fù)載下限,則恢復(fù)消息拉取,以實(shí)現(xiàn)對(duì)虛擬機(jī)處理資源的充分利用。通過上述方案可以根據(jù)服務(wù)器集群中各虛擬機(jī)的實(shí)際負(fù)載能力進(jìn)行消息拉取,可以將消息更多的分配到負(fù)載能力較好的虛擬機(jī),在充分有效利用處理資源的同時(shí),可以提高消息的整體處理效率。

并且,本申請(qǐng)實(shí)施例中,還可以采用消息緩存子隊(duì)列緩存從消息中間件的消息緩存主隊(duì)列中拉取的消息,并在拉取消息之后,通知消息中間件刪除已拉取的消息,或是標(biāo)記為已處理,從而有效緩解了消息中間件的存儲(chǔ)壓力,避免消息中間件上出現(xiàn)消息堆積以及消息漏掉未處理的問題。

對(duì)于裝置實(shí)施例而言,由于其與方法實(shí)施例基本相似,所以描述的比較簡單,相關(guān)之處參見方法實(shí)施例的部分說明即可。

本說明書中的各個(gè)實(shí)施例均采用遞進(jìn)的方式描述,每個(gè)實(shí)施例重點(diǎn)說明的都是與其他實(shí)施例的不同之處,各個(gè)實(shí)施例之間相同相似的部分互相參見即可。

本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本申請(qǐng)實(shí)施例的實(shí)施例可提供為方法、裝置、或計(jì)算機(jī)程序產(chǎn)品。因此,本申請(qǐng)實(shí)施例可采用完全硬件實(shí)施例、完全軟件實(shí)施例、或結(jié)合軟件和硬件方面的實(shí)施例的形式。而且,本申請(qǐng)實(shí)施例可采用在一個(gè)或多個(gè)其中包含有計(jì)算機(jī)可用程序代碼的計(jì)算機(jī)可用存儲(chǔ)介質(zhì)(包括但不限于磁盤存儲(chǔ)器、cd-rom、光學(xué)存儲(chǔ)器等)上實(shí)施的計(jì)算機(jī)程序產(chǎn)品的形式。

在一個(gè)典型的配置中,所述計(jì)算機(jī)設(shè)備包括一個(gè)或多個(gè)處理器(cpu)、輸入/輸出接口、網(wǎng)絡(luò)接口和內(nèi)存。內(nèi)存可能包括計(jì)算機(jī)可讀介質(zhì)中的非永久性存儲(chǔ)器,隨機(jī)存取存儲(chǔ)器(ram)和/或非易失性內(nèi)存等形式,如只讀存儲(chǔ)器(rom)或閃存(flashram)。內(nèi)存是計(jì)算機(jī)可讀介質(zhì)的示 例。計(jì)算機(jī)可讀介質(zhì)包括永久性和非永久性、可移動(dòng)和非可移動(dòng)媒體可以由任何方法或技術(shù)來實(shí)現(xiàn)信息存儲(chǔ)。信息可以是計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序的模塊或其他數(shù)據(jù)。計(jì)算機(jī)的存儲(chǔ)介質(zhì)的例子包括,但不限于相變內(nèi)存(pram)、靜態(tài)隨機(jī)存取存儲(chǔ)器(sram)、動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(dram)、其他類型的隨機(jī)存取存儲(chǔ)器(ram)、只讀存儲(chǔ)器(rom)、電可擦除可編程只讀存儲(chǔ)器(eeprom)、快閃記憶體或其他內(nèi)存技術(shù)、只讀光盤只讀存儲(chǔ)器(cd-rom)、數(shù)字多功能光盤(dvd)或其他光學(xué)存儲(chǔ)、磁盒式磁帶,磁帶磁磁盤存儲(chǔ)或其他磁性存儲(chǔ)設(shè)備或任何其他非傳輸介質(zhì),可用于存儲(chǔ)可以被計(jì)算設(shè)備訪問的信息。按照本文中的界定,計(jì)算機(jī)可讀介質(zhì)不包括非持續(xù)性的電腦可讀媒體(transitorymedia),如調(diào)制的數(shù)據(jù)信號(hào)和載波。

本申請(qǐng)實(shí)施例是參照根據(jù)本申請(qǐng)實(shí)施例的方法、終端設(shè)備(系統(tǒng))、和計(jì)算機(jī)程序產(chǎn)品的流程圖和/或方框圖來描述的。應(yīng)理解可由計(jì)算機(jī)程序指令實(shí)現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻@些計(jì)算機(jī)程序指令到通用計(jì)算機(jī)、專用計(jì)算機(jī)、嵌入式處理機(jī)或其他可編程數(shù)據(jù)處理終端設(shè)備的處理器以產(chǎn)生一個(gè)機(jī)器,使得通過計(jì)算機(jī)或其他可編程數(shù)據(jù)處理終端設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的裝置。

這些計(jì)算機(jī)程序指令也可存儲(chǔ)在能引導(dǎo)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理終端設(shè)備以特定方式工作的計(jì)算機(jī)可讀存儲(chǔ)器中,使得存儲(chǔ)在該計(jì)算機(jī)可讀存儲(chǔ)器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能。

這些計(jì)算機(jī)程序指令也可裝載到計(jì)算機(jī)或其他可編程數(shù)據(jù)處理終端設(shè)備上,使得在計(jì)算機(jī)或其他可編程終端設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的處理,從而在計(jì)算機(jī)或其他可編程終端設(shè)備上執(zhí)行的指令提供用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的步驟。

盡管已描述了本申請(qǐng)實(shí)施例的優(yōu)選實(shí)施例,但本領(lǐng)域內(nèi)的技術(shù)人員一旦得知了基本創(chuàng)造性概念,則可對(duì)這些實(shí)施例做出另外的變更和修改。所以,所附權(quán)利要求意欲解釋為包括優(yōu)選實(shí)施例以及落入本申請(qǐng)實(shí)施例范圍的所有變更和修改。

最后,還需要說明的是,在本文中,諸如第一和第二等之類的關(guān)系術(shù)語僅僅用來將一個(gè)實(shí)體或者操作與另一個(gè)實(shí)體或操作區(qū)分開來,而不一定要求或者暗示這些實(shí)體或操作之間存在任何這種實(shí)際的關(guān)系或者順序。而且,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者終端設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者終端設(shè)備所固有的要素。在沒有更多限制的情況下,由語句“包括一個(gè)……”限定的要素,并不排除在包括所述要素的過程、方法、物品或者終端設(shè)備中還存在另外的相同要素。

以上對(duì)本申請(qǐng)所提供的一種消息處理方法及裝置,進(jìn)行了詳細(xì)介紹,本文中應(yīng)用了具體個(gè)例對(duì)本申請(qǐng)的原理及實(shí)施方式進(jìn)行了闡述,以上實(shí)施例的說明只是用于幫助理解本申請(qǐng)的方法及其核心思想;同時(shí),對(duì)于本領(lǐng)域的一般技術(shù)人員,依據(jù)本申請(qǐng)的思想,在具體實(shí)施方式及應(yīng)用范圍上均會(huì)有改變之處,綜上所述,本說明書內(nèi)容不應(yīng)理解為對(duì)本申請(qǐng)的限制。

當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1