欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

消息處理方法及裝置、服務(wù)器設(shè)備及計算機可讀介質(zhì)與流程

文檔序號:11276137閱讀:249來源:國知局
消息處理方法及裝置、服務(wù)器設(shè)備及計算機可讀介質(zhì)與流程

【技術(shù)領(lǐng)域】

本發(fā)明涉及通信技術(shù)領(lǐng)域,尤其涉及一種消息處理方法及裝置、服務(wù)器設(shè)備及計算機可讀介質(zhì)。



背景技術(shù):

隨著互聯(lián)網(wǎng)的發(fā)展以及網(wǎng)民數(shù)量的增多,每天產(chǎn)生了數(shù)以億計的數(shù)據(jù),消息中間件作為提交系統(tǒng)中的重要一環(huán),承載了規(guī)模龐大的消息。

在消息中間件的應(yīng)用中,如微博、微信、貼吧等應(yīng)用中,有很多場景對消息有時序要求,如多個人回復(fù)同一微博的場景下消息中間件需要順序下發(fā)消息,同時下發(fā)的消息只能是一條。即現(xiàn)有技術(shù)中,在有時序需求的場景下,均是將所有的消息順序處理,按照串行處理的方式下發(fā)消息,即使有打包消息處理方式,下游拿到后依然是按照順序處理消息。

因此,現(xiàn)有技術(shù)中消息處理方式在時序場景下,僅能夠按照串行的方式順序下發(fā)消息,導(dǎo)致消息處理的速度非常慢,消息處理的效率非常低。



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

本發(fā)明提供了一種消息處理方法及裝置、服務(wù)器設(shè)備及計算機可讀介質(zhì),用于提高消息處理的速度和消息處理的效率。

本發(fā)明提供了一種消息處理方法,所述方法包括:

多個消息處理模塊中的各所述消息處理模塊輪詢到消息窗口時,從所述消息窗口中獲取消息標(biāo)識最小的所述待發(fā)送消息;

將所述消息窗口中與所述待發(fā)送消息屬于同一分組的其它消息的狀態(tài)設(shè)置為鎖定狀態(tài);

下發(fā)所述待發(fā)送消息;

若所述待發(fā)送消息發(fā)送成功時,從所述消息窗口中移除所述待發(fā)送消息,并將與所述待發(fā)送消息屬于同一分組的其它消息的狀態(tài)設(shè)置為待發(fā)送狀態(tài)。

進一步可選地,在如上所述的方法中,若多個消息處理模塊中的各所述消息處理模塊輪詢到消息窗口時,從所述消息窗口中獲取消息標(biāo)識最小的所述待發(fā)送消息之前,所述方法還包括:

鎖定所述消息窗口;

將所述消息窗口中與所述待發(fā)送消息屬于同一分組的其它消息的狀態(tài)設(shè)置為鎖定狀態(tài)之后,下發(fā)所述待發(fā)送消息之前,所述方法還包括:

將所述待發(fā)送消息的狀態(tài)設(shè)置為下發(fā)中狀態(tài);

解鎖所述消息窗口。

進一步可選地,在如上所述的方法中,鎖定所述消息窗口之后,從所述消息窗口中獲取消息標(biāo)識最小的所述待發(fā)送消息之前,所述方法還包括:

獲取所述消息窗口讀取的消息;

檢測所述消息窗口中是否存在與所述讀取的消息屬于同一分組的消息;

若存在,根據(jù)所述消息窗口中與所述讀取的消息屬于同一分組的消息的狀態(tài)設(shè)置所述讀取的消息的狀態(tài);若不存在,將所述讀取的消息的狀態(tài)設(shè)置為待發(fā)送狀態(tài)。

進一步可選地,在如上所述的方法中,獲取所述消息窗口讀取的消息之前,所述方法還包括:

檢測并確定所述消息窗口中還有存儲空間,且存在待讀取的消息。

進一步可選地,在如上所述的方法中,所述方法還包括:

若所述待發(fā)送消息發(fā)送失敗時,將所述消息窗口中所述待發(fā)送消息以及與所述待發(fā)送消息屬于同一分組的其它消息的狀態(tài)設(shè)置為待發(fā)送狀態(tài)。

本發(fā)明還提供一種消息處理裝置,所述裝置包括多個消息處理模塊和消息窗口;所述消息窗口,用于存儲已從存儲介質(zhì)讀取的消息;所述多個消息處理模塊,用于采用輪詢的方式依次對所述消息窗口中的消息進行處理;

各所述消息處理模塊,用于當(dāng)輪詢到所述消息窗口時,從所述消息窗口中獲取消息標(biāo)識最小的所述待發(fā)送消息;將所述消息窗口中與所述待發(fā)送消息屬于同一分組的其它消息的狀態(tài)設(shè)置為鎖定狀態(tài);下發(fā)所述待發(fā)送消息;若所述待發(fā)送消息發(fā)送成功時,從所述消息窗口中移除所述待發(fā)送消息,并將與所述待發(fā)送消息屬于同一分組的其它消息的狀態(tài)設(shè)置為待發(fā)送狀態(tài)。

進一步可選地,在如上所述的裝置中,各所述消息處理模塊,還用于鎖定所述消息窗口;

各所述消息處理模塊,還用于將所述待發(fā)送消息的狀態(tài)設(shè)置為下發(fā)中狀態(tài);解鎖所述消息窗口。

進一步可選地,在如上所述的裝置中,各所述消息處理模塊,還用于獲取所述消息窗口讀取的消息;檢測所述消息窗口中是否存在與所述讀取的消息屬于同一分組的消息;若存在,根據(jù)所述消息窗口中與所述讀取的消息屬于同一分組的消息的狀態(tài)設(shè)置所述讀取的消息的狀態(tài);若不存在,將所述讀取的消息的狀態(tài)設(shè)置為待發(fā)送狀態(tài)。

進一步可選地,在如上所述的裝置中,各所述消息處理模塊,還用于檢測并確定所述消息窗口中還有存儲空間,且存在待讀取的消息。

進一步可選地,在如上所述的裝置中,各所述消息處理模塊,還用于若所述待發(fā)送消息發(fā)送失敗時,將所述消息窗口中所述待發(fā)送消息以及與所述待發(fā)送消息屬于同一分組的其它消息的狀態(tài)設(shè)置為待發(fā)送狀態(tài)。

本發(fā)明還提供一種服務(wù)器設(shè)備,所述設(shè)備包括:

一個或多個處理器;

存儲器,用于存儲一個或多個程序,

當(dāng)所述一個或多個程序被所述一個或多個處理器執(zhí)行,使得所述一個或多個處理器實現(xiàn)如上任一所述消息處理方法。

本發(fā)明還提供一種計算機可讀介質(zhì),其上存儲有計算機程序,該程序被處理器執(zhí)行時實現(xiàn)如上任一所述消息處理方法。

本發(fā)明的消息處理方法及裝置、服務(wù)器設(shè)備及計算機可讀介質(zhì),多個消息處理模塊中的各消息處理模塊輪詢到消息窗口時,通過從消息窗口中獲取消息標(biāo)識最小的待發(fā)送消息;將消息窗口中與待發(fā)送消息屬于同一分組的其它消息的狀態(tài)設(shè)置為鎖定狀態(tài);下發(fā)待發(fā)送消息;若待發(fā)送消息發(fā)送成功時,從消息窗口中移除待發(fā)送消息,并將與待發(fā)送消息屬于同一分組的其它消息的狀態(tài)設(shè)置為待發(fā)送狀態(tài)。采用本發(fā)明的技術(shù)方案,可以對時序背景下,對同一組的消息按照時序方式串行處理,不同組的消息進行并發(fā)處理,可以有效地提高消息處理的速度,從而有效地提高消息處理效率。

【附圖說明】

圖1為本發(fā)明的消息處理方法實施例一的流程圖。

圖2為本發(fā)明的消息處理方法實施例二的流程圖。

圖3為本發(fā)明的消息處理裝置實施例的結(jié)構(gòu)圖。

圖4為本發(fā)明提供的一種服務(wù)器設(shè)備的結(jié)構(gòu)圖。

【具體實施方式】

為了使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚,下面結(jié)合附圖和具體實施例對本發(fā)明進行詳細描述。

圖1為本發(fā)明的消息處理方法實施例一的流程圖。如圖1所示,本實施例的消息處理方法,具體可以包括如下步驟:

100、多個消息處理模塊中的各消息處理模塊輪詢到消息窗口時,從消息窗口中獲取消息標(biāo)識最小的待發(fā)送消息;

本實施例的待發(fā)送消息的狀態(tài)為待發(fā)送狀態(tài),例如,具體可以從消息窗口中的所有待發(fā)送狀態(tài)的消息中獲取消息標(biāo)識最小的待發(fā)送狀態(tài)的消息,作為待發(fā)送消息。

101、將消息窗口中與待發(fā)送消息屬于同一分組的其它消息的狀態(tài)設(shè)置為鎖定狀態(tài);

102、下發(fā)待發(fā)送消息;

103、若待發(fā)送消息發(fā)送成功時,從消息窗口中移除待發(fā)送消息,并將與待發(fā)送消息屬于同一分組的其它消息的狀態(tài)設(shè)置為待發(fā)送狀態(tài)。

本實施例的消息處理方法的應(yīng)用場景可以為微博、微信朋友圈以及貼吧等等社交應(yīng)用,還可以應(yīng)用在簽到等管理類應(yīng)用中,還可以應(yīng)用在購物類的應(yīng)用中。這些應(yīng)用具有共同的特點:大多數(shù)業(yè)務(wù)對時序的要求不是絕對的所有有序,而是部分有序,例如社交類應(yīng)用中的評論服務(wù),對同一主題的信息的評論需要保證順序,而不同主題的信息的評論可以沒有時序要求。對于管理類應(yīng)用中的簽到類服務(wù),同一個組織的簽到需要保證順序,而不同組織之間的簽到消息是沒有時序要求的。再例如,商品搶購類服務(wù),相同商品的訂單是需要保證時序,而不同商品的訂單之間是沒有強時序需求的。基于上述應(yīng)用中的服務(wù)的需求,可以將同一主題的評論按時序處理,而不同主題的評論則可以并發(fā)處理;將同一個組織的簽到按時序處理,而不同組織的簽到則可以并發(fā)處理;將相同商品的訂單按時序處理,而不同商品的訂單則可以并發(fā)處理;而現(xiàn)有技術(shù)中的所有消息處理架構(gòu)都是按照串行處理的順序處理消息,而缺乏應(yīng)對上述應(yīng)用場景中的有時序背景下并發(fā)處理消息的場景,因此,為彌補該技術(shù)缺陷,本實施例提供一種在時序背景下實現(xiàn)并發(fā)處理消息,以有效地提高消息的處理效率。

本實施例的消息處理方法的執(zhí)行主體可以為消息處理裝置。該消息處理裝置可以包括多個消息處理模塊和消息窗口。本實施例的消息處理方法中,在多個消息處理模塊輪詢對消息窗口的消息進行處理。每個消息處理模塊對消息的處理相當(dāng)于一個消息處理線程,這樣,多個消息處理模塊對消息的處理相當(dāng)于多線程,從而可以實現(xiàn)消息的并發(fā)處理。本實施例中還可以對消息窗口中的消息引入分組的概念,例如可以將屬于同一分組的消息設(shè)置相同的partitionkey值,簡稱pk值,這樣,具有相同的pk值的消息屬于同一分組。然后從消息窗口中獲取分組內(nèi)消息標(biāo)識最小的待發(fā)送消息以進行發(fā)送,這樣,可以實現(xiàn)在同一分組內(nèi)按照時序處理消息,而不同分組的消息可以實現(xiàn)并發(fā),從而有效地提高消息處理的效率。具體地,若多個消息處理模塊中的各消息處理模塊輪詢到消息窗口時,從消息窗口中獲取消息標(biāo)識最小的待發(fā)送消息。其中消息標(biāo)識可以為該消息進入消息窗口時,消息處理裝置為該消息分配的。且消息窗口中的所有消息的消息標(biāo)識按照各消息進入消息窗口的時間順序,由小到大依次排序。這樣,當(dāng)各消息處理模塊輪詢到處理消息窗口的消息時,都先獲取該消息窗口中消息標(biāo)識最小的待發(fā)送消息,以保證優(yōu)先處理消息進入消息窗口早的消息。然后將消息窗口中與待發(fā)送消息屬于同一分組的其它消息的狀態(tài)設(shè)置為鎖定狀態(tài);由于同一分組的消息具有相同的pk值,具體可以將消息窗口中與獲取的待發(fā)送消息具有相同pk值的其它消息的狀態(tài)設(shè)置為鎖定狀態(tài),具體地,將與獲取的待發(fā)送消息具有相同pk值的其它消息的狀態(tài)由待發(fā)送狀態(tài)改為鎖定狀態(tài)。這樣,即使其他消息處理模塊輪詢到該消息窗口,也無法對鎖定狀態(tài)的消息進行處理,可以保證同一分組內(nèi)的消息按照時間順序處理。然后,消息處理模塊下發(fā)待發(fā)送消息;若待發(fā)送消息發(fā)送成功時,從消息窗口中移除待發(fā)送消息,并將與待發(fā)送消息屬于同一分組的其它消息的狀態(tài)設(shè)置為待發(fā)送狀態(tài)。對于每一個消息處理模塊輪詢到消息窗口時,都按照上述方式對消息窗口中的消息進行處理??梢詫⑼环纸M中的消息按照時序處理,不同分組中的消息可以并發(fā)處理,從而有效地提高了消息處理的效率。

例如,本實施例的技術(shù)方案,可以將微博中所有的評論都放在消息窗口中,同一主題的評論歸為一組,從而可以實現(xiàn)同一主題的評論按時序處理,而不同主題的評論則可以并發(fā)處理;同理,本實施例的技術(shù)方案,可以將所有組織的簽到都放在消息窗口中,同一組織的簽到歸為一組,將同一個組織的簽到按時序處理,而不同組織的簽到則可以并發(fā)處理;同理,本實施例的技術(shù)方案,可以將所有商品的訂單都放在消息窗口中,同一商品的訂單歸為一組,將相同商品的訂單按時序處理,而不同商品的訂單則可以并發(fā)處理;同理,本實施例的技術(shù)方案,還可以適用于其他有時序背景下并發(fā)處理消息的場景,在此不再一一舉例贅述。

本實施例的消息窗口用于存儲已讀取的消息,具體可以為從磁盤讀取的消息或者也可以為從其它存儲介質(zhì)存儲的消息。消息窗口的大小可以為1-1000,即該消息窗口可以容納1-1000條消息。為了提高消息的并發(fā)能力,本實施例中采用多個消息處理模塊輪詢同一個消息窗口,從而實現(xiàn)對消息窗口中的消息進行多線程的并發(fā)處理。本實施例的技術(shù)方案,可以支持的線程數(shù)為1-400之間,即本實施例的消息處理模塊的數(shù)量可以為1-400,線程數(shù)小于或者等于消息窗口的大小。實際應(yīng)用中,消息窗口的大小和消息處理模塊的數(shù)量還可以根據(jù)實際業(yè)務(wù)需求做調(diào)整,以滿足業(yè)務(wù)需求,同時還能夠?qū)崿F(xiàn)并發(fā)消息,在此不再一一舉例贅述。

本實施例的消息處理方法,多個消息處理模塊中的各消息處理模塊輪詢到消息窗口時,從消息窗口中獲取消息標(biāo)識最小的待發(fā)送消息;將消息窗口中與待發(fā)送消息屬于同一分組的其它消息的狀態(tài)設(shè)置為鎖定狀態(tài);下發(fā)待發(fā)送消息;若待發(fā)送消息發(fā)送成功時,從消息窗口中移除待發(fā)送消息,并將與待發(fā)送消息屬于同一分組的其它消息的狀態(tài)設(shè)置為待發(fā)送狀態(tài)。采用本實施例的技術(shù)方案,可以對時序背景下,對同一組的消息按照時序方式串行處理,不同組的消息進行并發(fā)處理,可以有效地提高消息處理的速度,從而有效地提高消息處理效率。

進一步可選地,各消息處理模塊輪詢到消息窗口時,在根據(jù)上述實施例的步驟100-103對消息處理的過程中,可以設(shè)定規(guī)則,其它未輪詢到的消息處理模塊不能對消息窗口中的消息進行處理。或者為了避免其它消息處理模塊對消息窗口中的消息進行處理,當(dāng)前輪詢在消息窗口的消息處理模塊可以全程對消息窗口進行鎖定,待處理完成之后,再對該消息窗口進行解鎖,待下一個輪詢的消息處理模塊再對消息窗口進行鎖定,然后對消息窗口中的消息按照上述實施例的步驟100-103進行處理,再解鎖消息窗口。

進一步可選地,在上述實施例的技術(shù)方案的基礎(chǔ)上,在步驟100“多個消息處理模塊中的各消息處理模塊輪詢到消息窗口時,從消息窗口中獲取消息標(biāo)識最小的待發(fā)送消息”之前,還可以包括如下步驟:鎖定消息窗口;

并進一步地,在步驟101“將消息窗口中與待發(fā)送消息屬于同一分組的其它消息的狀態(tài)設(shè)置為鎖定狀態(tài)”之后,步驟102“下發(fā)待發(fā)送消息”之前,還可以包括如下步驟:

(a1)將待發(fā)送消息的狀態(tài)設(shè)置為下發(fā)中狀態(tài);

(a2)解鎖消息窗口。

本實施例中的消息狀態(tài)可以包括待發(fā)送狀態(tài)、鎖定狀態(tài)和下發(fā)中狀態(tài)。對于每一個分組中的消息,若分組中沒有下發(fā)中狀態(tài)的消息,該分組中的所有消息便處于待發(fā)送狀態(tài)。若該分組中有一條消息處理下發(fā)中狀態(tài),則其他消息應(yīng)該處于鎖定狀態(tài)。

該方案中在步驟100之前對消息窗口鎖定,從消息窗口中獲取消息標(biāo)識最小的待發(fā)送消息的狀態(tài)應(yīng)該為待發(fā)送狀態(tài),在對該待發(fā)送消息下發(fā)之前,先將該待發(fā)送消息的狀態(tài)修改為下發(fā)中狀態(tài)。然后解鎖該消息窗口。此時該待發(fā)送消息已經(jīng)與該消息處理模塊綁定,即使解鎖該消息窗口,該消息處理模塊仍可以繼續(xù)根據(jù)步驟102下發(fā)該待發(fā)送消息。該方案與上述消息處理模塊在步驟100-步驟103的全過程對消息窗口進行鎖定相比,可以使得下一個待輪詢的消息處理模塊及時輪詢到消息窗口,以對消息窗口中的消息進行及時處理,提高消息處理速度,從而提高消息處理效率。

本實施例中,各消息處理模塊在對執(zhí)行步驟100和步驟101的過程中,需要鎖定消息窗口,防止其他消息處理模塊對消息窗口的消息進行處理。例如多個消息處理模塊中的某消息處理模塊輪詢到消息窗口時,若未鎖定消息窗口,可能會導(dǎo)致不同的消息處理模塊從消息窗口中獲取消息標(biāo)識最小的待發(fā)送消息時,獲取到同一個待發(fā)送消息,造成消息處理錯誤。而且本實施例中,消息處理模塊將消息窗口中與待發(fā)送消息屬于同一分組的其它消息的狀態(tài)設(shè)置為鎖定狀態(tài)的過程,優(yōu)選地也在消息窗口鎖定狀態(tài)中進行,以防止當(dāng)消息窗口解鎖后,與待發(fā)送消息屬于同一分組的其它消息的狀態(tài)還未鎖定,導(dǎo)致其他消息處理模塊會從該分組中獲取待發(fā)送消息,無法保證該分組中的消息按照時序進行串行處理;本實施例中通過對消息窗口進行鎖定,并在步驟101之后,再將待發(fā)送消息的狀態(tài)設(shè)置為下發(fā)中狀態(tài);解鎖消息窗口,可以使得同一分組中僅有一條消息處于待發(fā)送狀態(tài),而其他消息處于鎖定狀態(tài),以保證同一分組中各消息按照時序進行串行處理。通過采用上述實施例中的加鎖消息窗口,可以保證各消息處理模塊的線程之間互相排斥

進一步可選地,在上述實施例的技術(shù)方案的基礎(chǔ)上,在步驟“鎖定消息窗口”之后,步驟100“從消息窗口中獲取消息標(biāo)識最小的待發(fā)送消息”之前,還可以包括如下步驟:

(b1)讀取消息窗口的待讀取的消息,并存入消息窗口中;

(b2)檢測消息窗口中是否存在與讀取的消息屬于同一分組的消息;若存在,執(zhí)行步驟(b3);若不存在,執(zhí)行步驟(b4);

(b3)根據(jù)消息窗口中與讀取的消息屬于同一分組的消息的狀態(tài)設(shè)置讀取的消息的狀態(tài);

(b4)將讀取的消息的狀態(tài)設(shè)置為待發(fā)送狀態(tài)。

本實施例中,消息產(chǎn)生之后,按照產(chǎn)生的時間順序依次會在消息窗口中發(fā)出未讀取的提示,每一個消息處理裝置輪詢到消息窗口時,可以檢測消息窗口是否存在待讀取的消息,若存在,從磁盤或者其他存儲介質(zhì)讀取該待讀取的消息,作為讀取的消息,并將該讀取的消息存儲在消息窗口中。然后檢測消息窗口中是否存在與該讀取的消息屬于同一分組的消息;若存在,根據(jù)消息窗口中與讀取的消息屬于同一分組的消息的狀態(tài)設(shè)置讀取的消息的狀態(tài);例如,判斷消息窗口中與讀取的消息屬于同一分組的消息中是否存在下發(fā)中狀態(tài)的消息,若存在,將該讀取消息的狀態(tài)設(shè)置為鎖定狀態(tài)。若不存在,判斷該消息窗口中與該讀取的消息屬于同一分組的消息的狀態(tài)是否均為待發(fā)送狀態(tài),若是,則將該讀取消息的狀態(tài)設(shè)置為待發(fā)送狀態(tài)。另外,若消息窗口中不存在與該讀取的消息屬于同一分組的消息;則表示消息窗口中此時還不存在與該讀取消息屬于同一分組的消息,直接將該讀取的消息的狀態(tài)設(shè)置為待發(fā)送狀態(tài)。通過采用該方案,可以對每一條讀取至消息窗口中的消息設(shè)置準(zhǔn)確的消息狀態(tài),便于后續(xù)根據(jù)消息狀態(tài)對消息窗口中的消息進行準(zhǔn)確處理。

進一步可選地,在上述實施例的技術(shù)方案的基礎(chǔ)上,步驟(b1)“獲取消息窗口讀取的消息”之前,還可以包括:檢測并確定消息窗口中還有存儲空間,且存在待讀取的消息。

由于消息窗口具有設(shè)定的大小,因此,在消息處理模塊獲取讀取的消息之前,可以先檢測消息窗口是否還有存儲空間,若消息窗口具有存儲空間,且此時消息窗口存在待讀取的消息,此時可以獲取按照消息產(chǎn)生的時間的先后順序獲取讀取的消息,并將讀取的消息存入消息窗口。且消息處理模塊讀取到讀取的消息至消息窗口之后,還要給該讀取的消息配置消息標(biāo)識,該消息標(biāo)識要大小前一個緊相鄰配置的消息標(biāo)識。

進一步可選地,在上述實施例的技術(shù)方案的基礎(chǔ)上,還可以包括:若待發(fā)送消息發(fā)送失敗時,將消息窗口中待發(fā)送消息以及與待發(fā)送消息屬于同一分組的其它消息的狀態(tài)設(shè)置為待發(fā)送狀態(tài)。

為了保證消息發(fā)送沒有漏發(fā),本實施例中,若待發(fā)送消息發(fā)送失敗,此時需要將待發(fā)送消息的狀態(tài)由下發(fā)中狀態(tài)改為待發(fā)送狀態(tài),以便于該消息可以及時再次被下發(fā)。再次被下發(fā)時,可以與上一次下發(fā)失敗的消息處理模塊不是同一消息處理模塊。同時,也需要將與待發(fā)送消息屬于同一分組的其它消息的狀態(tài)由鎖定狀態(tài)改為待發(fā)送狀態(tài),以保證消息后續(xù)能夠從待發(fā)送狀態(tài)的消息中及時獲取到待發(fā)送消息,從而保證消息的正常下發(fā)。

上述實施例的消息處理方法,通過采用上述技術(shù)方案,可以對時序背景下,準(zhǔn)確地對同一組的消息按照時序方式串行處理,不同組的消息進行并發(fā)處理,可以有效地提高消息處理的速度,從而有效地提高消息處理效率。

圖2為本發(fā)明的消息處理方法實施例二的流程圖。如圖2所示,本實施例的消息處理方法在上述實施例的技術(shù)方案的基礎(chǔ)上,進一步更加詳細地介紹本發(fā)明的技術(shù)方案。如圖2所示,本實施例的消息處理方法,具體可以包括如下步驟:

200、1000個消息處理模塊中的第i個輪詢到處理消息窗口中的消息,第i個消息處理模塊檢測消息窗口中是否有剩余存儲空間;若有,執(zhí)行步驟201,否則執(zhí)行步驟206;

本實施例中以消息處理裝置中包括1000個消息處理模塊、且消息窗口能夠容納400條消息為例,來描述本發(fā)明的技術(shù)方案。1000個消息處理模塊輪詢對消息窗口中的消息進行處理。其中i大于或者等于1,小于或者等于1000。實際使用中,1000個消息處理模塊可以按照順序輪詢消息窗口,以對消息窗口中的消息進行處理。

201、第i個消息處理模塊檢測消息窗口中是否有待讀取的消息,若有,執(zhí)行步驟202;否則執(zhí)行步驟206;

202、第i個消息處理模塊讀取一條待讀取的消息,并存入消息窗口中;執(zhí)行步驟203;

本實施例中,步驟200中,以第i個消息處理模塊僅判斷消息窗口中是否有剩余存儲空間為例,而不判斷存儲空間的大小。只要第i個消息處理模塊確定消息窗口中存在存儲空間,那么消息窗口中至少可以存儲一條讀取的消息。因此本實施例中,以第i個消息處理模塊輪詢到消息窗口時,僅讀取一條待讀取的消息為例。按照類似的方式,每一個消息處理模塊輪詢時,僅讀取一條待讀取的消息。本實施例中,消息處理模塊讀取各待讀取的消息時,可以按照各待讀取的消息的提示的順序,或者可以按照各待讀取消息產(chǎn)生的時間的順序?;蛘?,本實施例中,步驟200中第i個消息處理模塊檢測并確定消息窗口中有剩余存儲空間之后,還可以確定剩余存儲空間的大小,即還能夠存儲幾條消息;并進一步在步驟201中檢測并確定有待讀取消息時,確定有幾條待讀取的消息。然后根據(jù)消息窗口中剩余存儲空間來讀取待讀取的消息。例如,若剩余存儲空間能夠容納的消息的條數(shù)大于或者等于待讀取的消息的條數(shù),可以直接讀取所有待讀取的消息;若剩余存儲空間能夠容納的消息的條數(shù)小于待讀取的消息的條數(shù),本次讀取的消息的條數(shù)等于剩余存儲空間能夠容納的消息的條數(shù);剩余的待讀取的消息可以等消息窗口有存儲空間之后再讀取。

203、第i個消息處理模塊檢測消息窗口中是否存在與讀取的消息屬于同一分組的消息;若存在,執(zhí)行步驟204;若不存在,執(zhí)行步驟205;

204、第i個消息處理模塊根據(jù)消息窗口中與讀取的消息屬于同一分組的消息的狀態(tài)設(shè)置讀取的消息的狀態(tài);執(zhí)行步驟206;

該步驟中的具體實現(xiàn)方式可以參考上述相關(guān)實施例的記載,在此不再贅述。

205、第i個消息處理模塊將讀取的消息的狀態(tài)設(shè)置為待發(fā)送狀態(tài);執(zhí)行步驟206;

206、第i個消息處理模塊鎖定消息窗口;執(zhí)行步驟207;

207、第i個消息處理模塊從消息窗口的所有待發(fā)送狀態(tài)的消息中獲取消息標(biāo)識最小的待發(fā)送狀態(tài)的消息,作為待發(fā)送消息;執(zhí)行步驟208;

208、第i個消息處理模塊將消息窗口中與待發(fā)送消息屬于同一分組的其它消息的狀態(tài)設(shè)置為鎖定狀態(tài);執(zhí)行步驟209;

209、第i個消息處理模塊將待發(fā)送消息的狀態(tài)設(shè)置為下發(fā)中狀態(tài);并解鎖消息窗口;執(zhí)行步驟210;

本實施例中,若輪詢規(guī)則為消息窗口解鎖,下一個消息處理模塊便可以輪詢該消息窗口時,此時步驟200第i個消息處理模塊解鎖消息窗口時,下一個消息處理模塊便可以按照上述步驟200-209對消息窗口進行處理。但是第i個消息處理模塊對消息處理還未完成,繼續(xù)按照下屬步驟進行消息下發(fā)。

210、第i個消息處理模塊下發(fā)待發(fā)送消息;執(zhí)行步驟211;

211、第i個消息處理模塊判斷消息發(fā)送是否成功;若成功,執(zhí)行步驟212;若未成功,執(zhí)行步驟213;

本實施例中,第i個消息處理模塊在向下游下發(fā)消息之后,下游若收到消息會返回一個收到消息的響應(yīng)消息,此時第i個消息處理模塊確定發(fā)送消息成功。若下游返回的是一個消息錯誤等之類的消息,此時第i個消息處理模塊確定發(fā)送消息未成功,即發(fā)送消息失敗。或者當(dāng)?shù)趇個消息處理模塊在預(yù)設(shè)的時間段內(nèi)未收到任何響應(yīng)消息,也可以確定該消息發(fā)送未成功,即發(fā)送消息失敗。當(dāng)發(fā)送消息失敗之后,后續(xù)需要重新發(fā)送該消息,具體可以由其他輪詢到消息窗口的消息處理模塊來發(fā)送該消息。

212、第i個消息處理模塊從消息窗口中移除待發(fā)送消息,并將與待發(fā)送消息屬于同一分組的其它消息的狀態(tài)由鎖定狀態(tài)修改為待發(fā)送狀態(tài);結(jié)束。

213、第i個消息處理模塊將待發(fā)送消息的狀態(tài)由下發(fā)中狀態(tài)修改為待發(fā)送狀態(tài),將將與待發(fā)送消息屬于同一分組的其它消息的狀態(tài)由鎖定狀態(tài)修改為待發(fā)送狀態(tài),結(jié)束。

此時,第i個消息處理模塊消息處理完成,i可以遞增1,輪詢到下一個消息處理模塊對消息窗口的消息進行處理。另外,為了提高消息處理效率,在步驟209之后,第i個消息處理模塊解鎖消息窗口之后,此時下一個消息處理模塊也可以對消息窗口進行處理,也就是說,此時在當(dāng)前第i個消息處理模塊下發(fā)消息的過程中,下一個消息處理已經(jīng)輪詢到消息窗口,開始按照上述對消息窗口的消息進行處理。1000個消息處理模塊一直按照上述方式對消息窗口中的消息進行處理。

本實施例的消息處理方法,通過采用上述技術(shù)方案,可以對時序背景下,準(zhǔn)確地對同一組的消息按照時序方式串行處理,不同組的消息進行并發(fā)處理,可以有效地提高消息處理的速度,從而有效地提高消息處理效率。

圖3為本發(fā)明的消息處理裝置實施例的結(jié)構(gòu)圖。如圖3所示,本實施例的消息處理裝置,具體可以包括多個消息處理模塊10和消息窗口11;消息窗口11用于存儲已從存儲介質(zhì)讀取的消息;多個消息處理模塊10用于采用輪詢的方式依次對消息窗口11中的消息進行處理;

各消息處理模塊10用于當(dāng)輪詢到消息窗口11時,從消息窗口11中獲取消息標(biāo)識最小的待發(fā)送消息;將消息窗口11中與待發(fā)送消息屬于同一分組的其它消息的狀態(tài)設(shè)置為鎖定狀態(tài);下發(fā)待發(fā)送消息;若待發(fā)送消息發(fā)送成功時,從消息窗口中移除待發(fā)送消息,并將與待發(fā)送消息屬于同一分組的其它消息的狀態(tài)設(shè)置為待發(fā)送狀態(tài)。

本實施例的消息處理裝置,通過采用上述消息處理模塊10和消息窗口11實現(xiàn)對消息處理的實現(xiàn)原理以及技術(shù)效果,與上述相關(guān)方法實施例的實現(xiàn)相同,詳細可以上述相關(guān)方法實施例的記載,在此不再贅述。

進一步可選地,在上述實施例的技術(shù)方案的基礎(chǔ)上,其中各消息處理模塊10還用于鎖定消息窗口11;

各消息處理模塊10還用于將待發(fā)送消息的狀態(tài)設(shè)置為下發(fā)中狀態(tài);解鎖消息窗口11。

進一步可選地,在上述實施例的技術(shù)方案的基礎(chǔ)上,各消息處理模塊10還用于讀取消息窗口11的待讀取的消息,并存入消息窗口11中;檢測消息窗口11中是否存在與讀取的消息屬于同一分組的消息;若存在,根據(jù)消息窗口11中與讀取的消息屬于同一分組的消息的狀態(tài)設(shè)置讀取的消息的狀態(tài);若不存在,將讀取的消息的狀態(tài)設(shè)置為待發(fā)送狀態(tài)。

進一步可選地,在上述實施例的技術(shù)方案的基礎(chǔ)上,各消息處理模塊10還用于檢測并確定消息窗口11中還有存儲空間,且存在待讀取的消息。

進一步可選地,在上述實施例的技術(shù)方案的基礎(chǔ)上,各消息處理模塊10還用于若待發(fā)送消息發(fā)送失敗時,將消息窗口11中待發(fā)送消息以及與待發(fā)送消息屬于同一分組的其它消息的狀態(tài)設(shè)置為待發(fā)送狀態(tài)。

本發(fā)明還提供一種服務(wù)器設(shè)備,包括一個或多個處理器、以及存儲器;存儲器,用于存儲一個或多個程序;當(dāng)一個或多個程序被一個或多個處理器執(zhí)行,使得一個或多個處理器實現(xiàn)如上述實施例所示的消息處理方法。

例如,圖4為本發(fā)明提供的一種服務(wù)器設(shè)備的結(jié)構(gòu)圖。圖4示出了適于用來實現(xiàn)本發(fā)明實施方式的示例性服務(wù)器設(shè)備12a的框圖。圖4顯示的服務(wù)器設(shè)備12a僅僅是一個示例,不應(yīng)對本發(fā)明實施例的功能和使用范圍帶來任何限制。

如圖4所示,服務(wù)器設(shè)備12a以通用計算設(shè)備的形式表現(xiàn)。服務(wù)器設(shè)備12a的組件可以包括但不限于:一個或者多個處理器16a,系統(tǒng)存儲器28a,連接不同系統(tǒng)組件(包括系統(tǒng)存儲器28a和處理器16a)的總線18a。

總線18a表示幾類總線結(jié)構(gòu)中的一種或多種,包括存儲器總線或者存儲器控制器,外圍總線,圖形加速端口,處理器或者使用多種總線結(jié)構(gòu)中的任意總線結(jié)構(gòu)的局域總線。舉例來說,這些體系結(jié)構(gòu)包括但不限于工業(yè)標(biāo)準(zhǔn)體系結(jié)構(gòu)(isa)總線,微通道體系結(jié)構(gòu)(mac)總線,增強型isa總線、視頻電子標(biāo)準(zhǔn)協(xié)會(vesa)局域總線以及外圍組件互連(pci)總線。

服務(wù)器設(shè)備12a典型地包括多種計算機系統(tǒng)可讀介質(zhì)。這些介質(zhì)可以是任何能夠被服務(wù)器設(shè)備12a訪問的可用介質(zhì),包括易失性和非易失性介質(zhì),可移動的和不可移動的介質(zhì)。

系統(tǒng)存儲器28a可以包括易失性存儲器形式的計算機系統(tǒng)可讀介質(zhì),例如隨機存取存儲器(ram)30a和/或高速緩存存儲器32a。服務(wù)器設(shè)備12a可以進一步包括其它可移動/不可移動的、易失性/非易失性計算機系統(tǒng)存儲介質(zhì)。僅作為舉例,存儲系統(tǒng)34a可以用于讀寫不可移動的、非易失性磁介質(zhì)(圖4未顯示,通常稱為“硬盤驅(qū)動器”)。盡管圖4中未示出,可以提供用于對可移動非易失性磁盤(例如“軟盤”)讀寫的磁盤驅(qū)動器,以及對可移動非易失性光盤(例如cd-rom,dvd-rom或者其它光介質(zhì))讀寫的光盤驅(qū)動器。在這些情況下,每個驅(qū)動器可以通過一個或者多個數(shù)據(jù)介質(zhì)接口與總線18a相連。系統(tǒng)存儲器28a可以包括至少一個程序產(chǎn)品,該程序產(chǎn)品具有一組(例如至少一個)程序模塊,這些程序模塊被配置以執(zhí)行本發(fā)明上述圖1-圖3各實施例的消息處理模塊的功能。且上述實施例中的消息窗口也可以設(shè)置在系統(tǒng)存儲器28a中,以存儲待下發(fā)的消息。

具有一組(至少一個)程序模塊42a的程序/實用工具40a,可以存儲在例如系統(tǒng)存儲器28a中,這樣的程序模塊42a包括——但不限于——操作系統(tǒng)、一個或者多個應(yīng)用程序、其它程序模塊以及程序數(shù)據(jù),這些示例中的每一個或某種組合中可能包括網(wǎng)絡(luò)環(huán)境的實現(xiàn)。程序模塊42a通常執(zhí)行本發(fā)明所描述的上述圖1-圖3各實施例中的消息處理模塊的功能和/或消息處理方法。

服務(wù)器設(shè)備12a也可以與一個或多個外部設(shè)備14a(例如鍵盤、指向設(shè)備、顯示器24a等)通信,還可與一個或者多個使得用戶能與該服務(wù)器設(shè)備12a交互的設(shè)備通信,和/或與使得該服務(wù)器設(shè)備12a能與一個或多個其它計算設(shè)備進行通信的任何設(shè)備(例如網(wǎng)卡,調(diào)制解調(diào)器等等)通信。這種通信可以通過輸入/輸出(i/o)接口22a進行。并且,服務(wù)器設(shè)備12a還可以通過網(wǎng)絡(luò)適配器20a與一個或者多個網(wǎng)絡(luò)(例如局域網(wǎng)(lan),廣域網(wǎng)(wan)和/或公共網(wǎng)絡(luò),例如因特網(wǎng))通信。如圖所示,網(wǎng)絡(luò)適配器20a通過總線18a與服務(wù)器設(shè)備12a的其它模塊通信。應(yīng)當(dāng)明白,盡管圖中未示出,可以結(jié)合服務(wù)器設(shè)備12a使用其它硬件和/或軟件模塊,包括但不限于:微代碼、設(shè)備驅(qū)動器、冗余處理器、外部磁盤驅(qū)動陣列、raid系統(tǒng)、磁帶驅(qū)動器以及數(shù)據(jù)備份存儲系統(tǒng)等。

處理器16a通過運行存儲在系統(tǒng)存儲器28a中的程序,從而執(zhí)行各種功能應(yīng)用以及數(shù)據(jù)處理,例如實現(xiàn)上述實施例所示的障礙物識別方法。

本發(fā)明還提供一種計算機可讀介質(zhì),其上存儲有計算機程序,該程序被處理器執(zhí)行時實現(xiàn)如上述實施例所示的消息處理方法。

本實施例的計算機可讀介質(zhì)可以包括上述圖4所示實施例中的系統(tǒng)存儲器28a中的ram30a、和/或高速緩存存儲器32a、和/或存儲系統(tǒng)34a。

隨著科技的發(fā)展,計算機程序的傳播途徑不再受限于有形介質(zhì),還可以直接從網(wǎng)絡(luò)下載,或者采用其他方式獲取。因此,本實施例中的計算機可讀介質(zhì)不僅可以包括有形的介質(zhì),還可以包括無形的介質(zhì)。

本實施例的計算機可讀介質(zhì)可以采用一個或多個計算機可讀的介質(zhì)的任意組合。計算機可讀介質(zhì)可以是計算機可讀信號介質(zhì)或者計算機可讀存儲介質(zhì)。計算機可讀存儲介質(zhì)例如可以是——但不限于——電、磁、光、電磁、紅外線、或半導(dǎo)體的系統(tǒng)、裝置或器件,或者任意以上的組合。計算機可讀存儲介質(zhì)的更具體的例子(非窮舉的列表)包括:具有一個或多個導(dǎo)線的電連接、便攜式計算機磁盤、硬盤、隨機存取存儲器(ram)、只讀存儲器(rom)、可擦式可編程只讀存儲器(eprom或閃存)、光纖、便攜式緊湊磁盤只讀存儲器(cd-rom)、光存儲器件、磁存儲器件、或者上述的任意合適的組合。在本文件中,計算機可讀存儲介質(zhì)可以是任何包含或存儲程序的有形介質(zhì),該程序可以被指令執(zhí)行系統(tǒng)、裝置或者器件使用或者與其結(jié)合使用。

計算機可讀的信號介質(zhì)可以包括在基帶中或者作為載波一部分傳播的數(shù)據(jù)信號,其中承載了計算機可讀的程序代碼。這種傳播的數(shù)據(jù)信號可以采用多種形式,包括——但不限于——電磁信號、光信號或上述的任意合適的組合。計算機可讀的信號介質(zhì)還可以是計算機可讀存儲介質(zhì)以外的任何計算機可讀介質(zhì),該計算機可讀介質(zhì)可以發(fā)送、傳播或者傳輸用于由指令執(zhí)行系統(tǒng)、裝置或者器件使用或者與其結(jié)合使用的程序。

計算機可讀介質(zhì)上包含的程序代碼可以用任何適當(dāng)?shù)慕橘|(zhì)傳輸,包括——但不限于——無線、電線、光纜、rf等等,或者上述的任意合適的組合。

可以以一種或多種程序設(shè)計語言或其組合來編寫用于執(zhí)行本發(fā)明操作的計算機程序代碼,所述程序設(shè)計語言包括面向?qū)ο蟮某绦蛟O(shè)計語言—諸如java、smalltalk、c++,還包括常規(guī)的過程式程序設(shè)計語言—諸如”c”語言或類似的程序設(shè)計語言。程序代碼可以完全地在用戶計算機上執(zhí)行、部分地在用戶計算機上執(zhí)行、作為一個獨立的軟件包執(zhí)行、部分在用戶計算機上部分在遠程計算機上執(zhí)行、或者完全在遠程計算機或服務(wù)器上執(zhí)行。在涉及遠程計算機的情形中,遠程計算機可以通過任意種類的網(wǎng)絡(luò)——包括局域網(wǎng)(lan)或廣域網(wǎng)(wan)—連接到用戶計算機,或者,可以連接到外部計算機(例如利用因特網(wǎng)服務(wù)提供商來通過因特網(wǎng)連接)。

在本發(fā)明所提供的幾個實施例中,應(yīng)該理解到,所揭露的系統(tǒng),裝置和方法,可以通過其它的方式實現(xiàn)。例如,以上所描述的裝置實施例僅僅是示意性的,例如,所述單元的劃分,僅僅為一種邏輯功能劃分,實際實現(xiàn)時可以有另外的劃分方式。

所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡(luò)單元上??梢愿鶕?jù)實際的需要選擇其中的部分或者全部單元來實現(xiàn)本實施例方案的目的。

另外,在本發(fā)明各個實施例中的各功能單元可以集成在一個處理單元中,也可以是各個單元單獨物理存在,也可以兩個或兩個以上單元集成在一個單元中。上述集成的單元既可以采用硬件的形式實現(xiàn),也可以采用硬件加軟件功能單元的形式實現(xiàn)。

上述以軟件功能單元的形式實現(xiàn)的集成的單元,可以存儲在一個計算機可讀取存儲介質(zhì)中。上述軟件功能單元存儲在一個存儲介質(zhì)中,包括若干指令用以使得一臺計算機設(shè)備(可以是個人計算機,服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)或處理器(processor)執(zhí)行本發(fā)明各個實施例所述方法的部分步驟。而前述的存儲介質(zhì)包括:u盤、移動硬盤、只讀存儲器(read-onlymemory,rom)、隨機存取存儲器(randomaccessmemory,ram)、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。

以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進等,均應(yīng)包含在本發(fā)明保護的范圍之內(nèi)。

當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
桂林市| 南充市| 恭城| 凉城县| 宾川县| 四川省| 七台河市| 鹤山市| 手机| 昌江| 遂宁市| 运城市| 隆安县| 巴中市| 青神县| 顺昌县| 高平市| 内乡县| 环江| 西和县| 神池县| 邹城市| 文山县| 上犹县| 邻水| 左权县| 年辖:市辖区| 图木舒克市| 青川县| 锡林浩特市| 赣州市| 昂仁县| 阆中市| 松阳县| 刚察县| 林甸县| 江山市| 柘荣县| 康乐县| 通辽市| 华安县|