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

一種發(fā)送消息的方法及其系統(tǒng)的制作方法

文檔序號:6363091閱讀:238來源:國知局
專利名稱:一種發(fā)送消息的方法及其系統(tǒng)的制作方法
技術(shù)領(lǐng)域
本申請涉及計算機分布式系統(tǒng)領(lǐng)域,尤其涉及一種分布式系統(tǒng)中發(fā)送消息的方法及其系統(tǒng)。
背景技術(shù)
隨著淘寶商城不斷發(fā)展,其中的商家不斷增加,用戶也越來越多,為了更好實現(xiàn)對用戶的服務(wù)或商家的服務(wù),就需要將很多消息要發(fā)給商家或用戶,如發(fā)送旺旺消息,淘寶站內(nèi)的信,短消息及郵件等。一般情況下,上述信息都是通過分布式系統(tǒng)發(fā)送消息給用戶或商家,而為了使消息能夠高效的發(fā)送,分布式系統(tǒng)采用并發(fā)的方式發(fā)送消息。下面請參考圖1,其為本申請實施例中分布式系統(tǒng)消息分發(fā)的結(jié)構(gòu)示意圖。消息發(fā)送系統(tǒng)提供對外接口,以接收來自發(fā)送者的消息并保存在消息隊列中,再由消息發(fā)送進程分發(fā)給接收者。本申請發(fā)明人在實現(xiàn)本申請實施例中技術(shù)方案的過程中,發(fā)現(xiàn)上述現(xiàn)有技術(shù)至少存在如下技術(shù)問題:在讀取消息隊列的過程中,系統(tǒng)采用單線程讀取多線程分發(fā)的模式,即每次只保證有一個進程在讀取消息,然后再開始分發(fā)消息。因需保證只有一個進程在讀取消息,系統(tǒng)引入了鎖競爭,故而每次進程都需要判斷是否可讀。具體來說,系統(tǒng)通過加鎖的方式保證只有一個進程在讀取,由于數(shù)據(jù)庫本身機制的原因,在多線程并發(fā)的情況下,可能會造成死鎖。并發(fā)的線程越多,造成死鎖的概率就越大??梢?,在現(xiàn)有技術(shù)中,多進程讀取消息使得系統(tǒng)在發(fā)送消息的過程中,非常容易造成死鎖,從而降低系統(tǒng)發(fā)送消息的效率。

發(fā)明內(nèi)容
本申請?zhí)峁┝艘环N發(fā)送消息的方法及其系統(tǒng),以解決了因保證只有一個任務(wù)在讀取消息時而造成的死鎖的技術(shù)問題,消除了鎖競爭,提高了消息發(fā)送效率。一方面,通過本申請的一個實施例,提供如下技術(shù)方案:一種發(fā)送消息的方法,應(yīng)用在包括有數(shù)據(jù)庫,與所述數(shù)據(jù)庫連接的M個應(yīng)用服務(wù)器和與所述數(shù)據(jù)庫連接的至少N個消息任務(wù)服務(wù)器的系統(tǒng)中,其中,所述N個消息任務(wù)服務(wù)器中每個消息任務(wù)服務(wù)器包括有一個消息發(fā)送進程,M為大于或等于I的整數(shù),N為大于或等于2的整數(shù),所述方法包括:判斷所述N個消息發(fā)送進程中每個消息發(fā)送進程的狀態(tài)是否是有效狀態(tài);基于所述判斷,從所述N個消息發(fā)送進程中確定K個消息發(fā)送進程的狀為有效狀態(tài),其中K為大于I但小于N的整數(shù);從所述K個消息發(fā)送進程中,確定一個消息發(fā)送進程作為主消息發(fā)送進程;
通過所述主消息發(fā)送進程去啟動所述主消息發(fā)送進程所在消息任務(wù)服務(wù)器中的消息調(diào)度器;通過所述消息調(diào)度器,從所述數(shù)據(jù)庫的消息隊列中獲得至少一個沒有進程歸屬的待發(fā)送消息;從所述K個消息發(fā)送進程中,為所述至少一個沒有進程歸屬的待發(fā)送消息中每個待發(fā)送消息分配一個消息發(fā)送進程;通過所述K個消息發(fā)送進程發(fā)送所述至少一個沒有進程歸屬的待發(fā)送消息。另一方面,通過本申請的一個實施例,提供如下技術(shù)方案:一種發(fā)送消息的系統(tǒng),包括:M個應(yīng)用服務(wù)器,與至少一個發(fā)送端連接,用于接收所述至少一個發(fā)送端發(fā)送的待發(fā)送消息,其中,所述M個應(yīng)用服務(wù)器中每個應(yīng)用服務(wù)器包括一個消息發(fā)送接口,M為大于或等于I的整數(shù);數(shù)據(jù)庫,與所述M個應(yīng)用服務(wù)器連接,用于通過每個應(yīng)用服務(wù)器的所述消息發(fā)送,接收所述至少一個待發(fā)送消息,并將所述至少一個待發(fā)送消息放在一消息隊列中;N個消息任務(wù)服務(wù)器,與所述數(shù)據(jù)庫連接,所述N個消息任務(wù)服務(wù)器中每個消息任務(wù)服務(wù)器包括有一個消息發(fā)送進程;其中,所述N個消息發(fā)送進程中有K個消息發(fā)送進程的狀態(tài)為有效狀態(tài),所述K個消息發(fā)送進程中有一個為主消息發(fā)送進程;其中,所述主消息發(fā)送進程對應(yīng)的消息任務(wù)服務(wù)器用于:通過所述主消息發(fā)送進程啟動所述主消息發(fā)送進程所在消息任務(wù)服務(wù)器中的消息調(diào)度器;通過所述消息調(diào)度器,從所述數(shù)據(jù)庫的消息隊列中獲得至少一個沒有進程歸屬的待發(fā)送消息;從所述K個消息發(fā)送進程中,為所述至少一個沒有進程歸屬的待發(fā)送消息中每個待發(fā)送消息分配一個消息發(fā)送進程;通過所述K個消息發(fā)送進程發(fā)送所述至少一個沒有進程歸屬的待發(fā)送消息。上述技術(shù)方案中的一個或多個技術(shù)方案具有如下優(yōu)點或有益效果:一、通過采用在任務(wù)分發(fā)過程中進行消息調(diào)度的方法,解決了任務(wù)分發(fā)過程中任務(wù)競爭消息造成死鎖的技術(shù)問題,從而避免了死鎖,達到了高效發(fā)送消息的技術(shù)效果。二、由于在消息分發(fā)的過程中采用了心跳檢測的技術(shù)手段,解決了消息發(fā)送過程中,檢測各個任務(wù)的有效性,從而達到了及時更新任務(wù)狀態(tài)的技術(shù)效果。三、通過采用消息調(diào)度算法和心跳檢測的技術(shù)手段,解決了消息在發(fā)送過程中,因任務(wù)暫停而導(dǎo)致消息閑置等待處理的問題,從而達到了智能的將未發(fā)送完成的消息轉(zhuǎn)移到可用任務(wù)的技術(shù)效果。


圖1為現(xiàn)有技術(shù)中分布式系統(tǒng)消息分發(fā)的結(jié)構(gòu)示意圖;圖2為本申請實施例一中消息發(fā)送的方法流程圖;圖3為本申請實施例中分配消息發(fā)送進程的流程圖;圖4為本申請實施例中發(fā)送待發(fā)送消息的流程圖5為本申請實施例中消息分配的示例圖;圖6為本申請實施例中消息發(fā)送進程的總體流程圖;圖7為本申請實施例中主消息發(fā)送進程的調(diào)度流程圖;圖8為本申請實施例中分布式系統(tǒng)功能模塊圖。
具體實施例方式為了使本申請所屬技術(shù)領(lǐng)域中的技術(shù)人員更清楚地理解本申請,下面結(jié)合附圖,通過具體的實施例對本申請技術(shù)方案作詳細描述。本申請實施例一提供了 一種消息發(fā)送方法,在本實施例中,所述方法應(yīng)用在一個包括有數(shù)據(jù)庫、應(yīng)用服務(wù)器和消息任務(wù)服務(wù)器的系統(tǒng)中,所述應(yīng)用服務(wù)器用于產(chǎn)生消息,t匕如產(chǎn)生淘寶站內(nèi)信、短消息和發(fā)送郵件等等,所述數(shù)據(jù)庫用于存放所述應(yīng)用服務(wù)器產(chǎn)生的此類消息信息,當消息任務(wù)服務(wù)器需要從數(shù)據(jù)庫中提取消息時,數(shù)據(jù)庫就按照消息隊列的順序?qū)⒋娣诺南鹘o所述消息任務(wù)服務(wù)器。而所述消息任務(wù)服務(wù)器就對所述數(shù)據(jù)庫存放的消息進行調(diào)度以及將上述消息進行發(fā)送。所述消息任務(wù)服務(wù)器在進行調(diào)度的時,由于采用多進程機制,因此消息任務(wù)服務(wù)器會為每個消息調(diào)度進程自動分配編號或者由技術(shù)人員根據(jù)實際情況具體設(shè)定。下面請參考圖2,為本申請實施例一中消息發(fā)送的方法流程圖;步驟200,判斷所述N個消息發(fā)送進程中每個消息發(fā)送進程的狀態(tài)是否是有效狀態(tài);在具體的實施過程中,應(yīng)用服務(wù)器將創(chuàng)建的消息存放在數(shù)據(jù)庫中,消息任務(wù)服務(wù)器將基于創(chuàng)建的消息,創(chuàng)建多個消息發(fā)送進程,以N作為參數(shù)表示所述多個消息發(fā)送進程,具體來講,該步驟將從N個消息發(fā)送進程中,判斷每個消息發(fā)送進程的狀態(tài)是否是有效狀態(tài),可以是判斷每個消息發(fā)送進程是否已經(jīng)注冊,若是注冊的消息發(fā)送進程,其狀態(tài)即為有效,反之,消息發(fā)送進程的狀態(tài)則為無效。步驟210,基于所述判斷,從所述N個消息發(fā)送進程中確定K個消息發(fā)送進程的狀為有效狀態(tài);在具體的實施過程中,基于步驟200的判斷,從所述N個消息發(fā)送進程中確定K個消息發(fā)送進程的狀態(tài)為有效狀態(tài),所述K僅作為一個表示有效狀態(tài)的消息發(fā)送進程的參數(shù),因為有效狀態(tài)的進程數(shù)量是小于等于消息發(fā)送進程的數(shù)量的,所以,K為大于I但小于等于N的整數(shù)。步驟220,從所述K個消息發(fā)送進程中,確定一個消息發(fā)送進程作為主消息發(fā)送進程;在具體的實施過程中,可首先檢查K個消息發(fā)送該進程中每個消息發(fā)送進程是否注冊,對于在所述K個消息發(fā)送該進程中已經(jīng)注冊的消息發(fā)送進程,通過心跳線程判斷所述已經(jīng)注冊的消息發(fā)送進程中每個消息發(fā)送進程的狀態(tài)是暫停還是有效;對于所述已經(jīng)注冊的消息發(fā)送進程中狀態(tài)為暫停的消息發(fā)送進程,更新消息發(fā)送狀態(tài)為有效;對于在所述K個消息發(fā)送進程中未注冊的消息發(fā)送進程,先注冊所述未注冊的消息發(fā)送進程中每個消息發(fā)送進程,然后通過心跳線程判斷注冊的消息發(fā)送進程的狀態(tài)是暫停還是有效狀態(tài);對于已經(jīng)注冊的消息發(fā)送進程中狀態(tài)為暫停的消息發(fā)送進程,更新狀態(tài)為有效;最后通過檢查,從所述K個消息發(fā)送進程中確定一個狀態(tài)為有效的消息發(fā)送進程為主消息發(fā)送進程。由于每個消息發(fā)送進程都具有一個唯一的數(shù)字ID,因此,可將進程ID最小的且沒有停止的任務(wù)確定為主任務(wù)。步驟230,通過所述主消息發(fā)送進程啟動所述主消息發(fā)送進程所在消息任務(wù)服務(wù)器中的消息調(diào)度器;步驟240,通過所述消息調(diào)度器,從所述數(shù)據(jù)庫的消息隊列中獲得至少一個沒有進程歸屬的待發(fā)送消息;在具體的實施過程中,通過步驟230啟動的所述消息調(diào)度器,從所述數(shù)據(jù)庫的消息隊列中,按照消息隊列的順序獲得至少一個沒有進程歸屬的待發(fā)送消息。需要說明的是,所述至少一個沒有進程歸屬的待發(fā)送消息可包括以下兩種:一種是來自應(yīng)用服務(wù)器新產(chǎn)生的待發(fā)送消息;另一種是歸屬于心跳停止的消息發(fā)送進程的待發(fā)送消息。步驟250,從所述K個消息發(fā)送進程中,為所述沒有進程歸屬的待發(fā)送消息分配一個消息發(fā)送進程;為了更好的說明分配消息發(fā)送進程的過程,將步驟250進行拆分,并結(jié)合附圖3,詳細說明分配消息發(fā)送進程的過程。在具體的實施過程中,分配消息發(fā)送進程包括以下步驟:步驟300,計算有效的消息發(fā)送進程的數(shù)量;在具體的實施過程中,從所述K個消息發(fā)送進程中,獲取至少一個狀態(tài)為有效的消息發(fā)送進程,將所述至少一個狀態(tài)為有效的消息發(fā)送進程的ID以數(shù)組的形式保存在所述消息任務(wù)服務(wù)器中,并根據(jù)數(shù)組中的內(nèi)容,計算狀態(tài)為有效的消息發(fā)送進程的數(shù)量,其中所述數(shù)組可以是在消息任務(wù)服務(wù)器中的內(nèi)存中存放的臨時數(shù)組,也可以是存放在數(shù)據(jù)庫中的一個存儲空間,本領(lǐng)域所屬的技術(shù)人員可以根據(jù)實際的情況具體設(shè)定。步驟310,計算取模結(jié)果;在具體的實施過程中,將所述沒有消息發(fā)送進程歸屬的的待發(fā)送消息,按照數(shù)組中的ID編號和所述待發(fā)送消息進程的數(shù)量進行取模,獲得取模結(jié)果。步驟320,根據(jù)所述取模結(jié)果,為沒有進程歸屬的待發(fā)送消息分配消息發(fā)送進程ID ;在具體的實施過程中,根據(jù)所述取模結(jié)果,為每個狀態(tài)為有效的發(fā)送進程分配一個還沒有進程歸屬的待發(fā)送消息ID。在步驟320步驟,根據(jù)所述取模結(jié)果,為沒有進程歸屬的待發(fā)送消息分配消息發(fā)送進程ID之后,將所述沒有消息發(fā)送進程歸屬的待發(fā)送消息的ID對應(yīng)的待發(fā)送消息分配給對應(yīng)的狀態(tài)為有效的消息發(fā)送進程。另外,對于有些心跳停止的消息發(fā)送進程,還需進行進一步的處理。比如對于心跳停止的消息發(fā)送進程進行后續(xù)的處理,下面將繼續(xù)描述后續(xù)心跳停止的消息發(fā)送進程的處理過程;
在所述從所述K個消息發(fā)送進程中,為所述至少一個沒有進程歸屬的待發(fā)送消息中每個待發(fā)送消息分配一個消息發(fā)送進程之后,還包括:根據(jù)每個消息發(fā)送進程的心跳,確定是否有心跳停止的消息發(fā)送進程;在具體的實施過程中,心跳是用來檢查進程是否為有效狀態(tài)的一種進程,當被檢測的進程停止時,心跳進程就會得到進程停止的通知?;诖诵奶涂梢源_定是否有心跳停止的消息發(fā)送進程。在有一個或多個心跳停止的消息發(fā)送進程時,為心跳停止的消息發(fā)送進程加鎖,減少了消息調(diào)度時產(chǎn)生的鎖競爭。另外,此處具體的加鎖可以采用數(shù)據(jù)庫的鎖機制。由于分布式系統(tǒng)中,進程的心跳狀態(tài)可能會由停止變?yōu)橛行?,比如系統(tǒng)的cpu由繁忙狀態(tài)變?yōu)榭臻e狀態(tài),或者進程到達了可以執(zhí)行的時間段時,所述停止的進程就會恢復(fù)成有效的狀態(tài),進而所述消息任務(wù)服務(wù)器會對后續(xù)恢復(fù)后可能啟動的進程還將進行進一步的處理。由于在多進程并發(fā)的機制下,所述心跳停止的消息發(fā)送進程可以重新啟動成為有效的進程,因此,需要判斷所述心跳停止的消息發(fā)送進程中是否有消息發(fā)送進程已經(jīng)啟動成為狀態(tài)為有效的消息發(fā)送進程;在所述心跳停止的消息發(fā)送進程中有已經(jīng)啟動成為狀態(tài)為有效的消息發(fā)送進程時,為所述已經(jīng)啟動成為狀態(tài)為有效的消息發(fā)送進程解鎖;在所述心跳停止的消息發(fā)送進程中沒有已經(jīng)啟動成為狀態(tài)為有效的消息發(fā)送進程時,將獲得所述沒有啟動成為狀態(tài)為有效的消息發(fā)送進程中的待發(fā)送消息,并將獲得的待發(fā)送消息重新分配一個消息狀態(tài)為有效的消息發(fā)送進程。在上述過程中,對進程的加鎖與解鎖可以采用數(shù)據(jù)庫的鎖機制即,select forupdate實現(xiàn),其他相同或相似加解鎖方式亦屬于本申請所保護的范圍。在完成將待發(fā)送消息分配給消息發(fā)送進程后,進一步的,執(zhí)行消息發(fā)送進程。具體來說,通過所述K個消息發(fā)送進程發(fā)送所述至少一個沒有進程歸屬的待發(fā)送消息;所述參數(shù)K僅作為一個具體的實例來表示在具體的實施過程中存在的消息發(fā)送進程數(shù)量,進一步地,結(jié)合附圖4,詳細說明發(fā)送待發(fā)送消息的過程。通過所述K個消息發(fā)送進程發(fā)送所述至少一個沒有進程歸屬的待發(fā)送消息包括以下步驟:步驟400,根據(jù)消息計劃發(fā)送時間獲取所屬的消息;在具體的實施過程中,由于每個消息發(fā)送進程在存放在數(shù)據(jù)庫的時候,都會存在一個計劃的發(fā)送時間,基于此計劃發(fā)送時間,當?shù)竭_發(fā)送時間后,消息發(fā)送進程就將獲得K個消息發(fā)送進程中每個有效消息發(fā)送進程的沒有消息發(fā)送進程歸屬的待發(fā)送消息,具體的消息發(fā)送進程獲得待發(fā)送消息的過程請參考圖5中描述的方式;步驟410,更新消息狀態(tài)為發(fā)送中,并更新發(fā)送開始時間;在具體的實施過程中,對于所述一個或多個沒有消息發(fā)送進程歸屬的待發(fā)送消息中每個待發(fā)送消息,更新消息狀態(tài)為發(fā)送中,更新發(fā)送開始時間;步驟420,提交到發(fā)送隊列;在具體的實施過程中,提交每個待發(fā)送消息到發(fā)送隊列,其中所述發(fā)送隊列是由消息發(fā)送進程構(gòu)按時間的先后順序進行排列的一個順序列;
步驟430,更新消息狀態(tài)為發(fā)送成功,更新發(fā)送結(jié)束時間;在具體的實施過程中,發(fā)送所述每個待發(fā)送消息,并在發(fā)送成功后,更新消息狀態(tài)為發(fā)送成功,更新發(fā)送結(jié)束時間。為了使審查員更好的理解本申請,下面將結(jié)合附圖5,舉例說明待發(fā)送消息的分配及發(fā)送過程。因為在分布式系統(tǒng)中,待發(fā)送的消息ID是數(shù)據(jù)的一個自增長序列,每新增一條待發(fā)送消息,應(yīng)用服務(wù)器收到發(fā)送者的消息后,將消息插入數(shù)據(jù)庫其序列值就增加1,同樣,進程的ID也是第一次啟動時,往數(shù)據(jù)庫插入的一條進程記錄,同樣也是自增長序列,序列從I開始,每新增一個進程,序列值增加I。請參考圖5,將所有待發(fā)送的消息和可用的進程進行編號,例如總共有7個待發(fā)送消息,4個進程,將所述7個進程和所述4個進程按照從小到大的順序排列,下面即以待發(fā)送消息的編號分別為1001、1002、1003、...、1007,4個進程編號為進程O、1、2、3作為示例,詳細描述消息和進程之間的分配過程。在具體的實施過程中,待發(fā)送消息的編號和消息發(fā)送進程的編號在創(chuàng)建的時候都已經(jīng)分配好了,此處的編號僅作為一個具體的實例以供參考。將待發(fā)送消息的ID和進程數(shù)量進行取模,獲得取模結(jié)果;如消息1001對4取模得1,1002對4取模得2,則消息1003到1007分別獲得的結(jié)果分別為3、0、1、2、3 ;基于所述取模結(jié)果,將每個消息分配到對應(yīng)數(shù)組下標的進程;將消息1001和1005分配給進程I ;將消息1002和1006分配給進程2 ;將消息1003和1007分配給進程3 ;將消息1004分配給進程0 ;上述分配好的消息正在發(fā)送中,若某進程突然停止了,比如進程I停止了,此時,可依照上述方式,根據(jù)數(shù)組下標重新分配沒有消息發(fā)送進程歸屬的待發(fā)送消息;對于消息發(fā)送進程I中的待發(fā)送消息,也可依照上述方式分配給其他消息發(fā)送進程。例如,針對待發(fā)送消息的編號分別為1001、1002、1003.....1007,各個消息編號分
別對當前消息發(fā)送進程數(shù)量3取模后,重新分配如下:將消息1001、1003、1007分配給進程3 ;將消息1002和1006分配給進程2 ;將消息1004和1005分配給進程O。也可以只是將當前停止的消息發(fā)送進程I中的待發(fā)關(guān)的消息1001和1005重新分配,如,依據(jù)消息1001和1005的消息編號分別對當前消息發(fā)送進程數(shù)量3取模后,分別分配給消息發(fā)送進程3和消息發(fā)送進程O。以上步驟為本申請中,消息發(fā)送的過程,為了使審查員更好的理解本申請,下面將從進程的角度,詳細說明進程發(fā)送的過程。請參考圖6,為本申請實施例中消息發(fā)送進程的總體流程圖;步驟600,檢查消息發(fā)送進程是否注冊;在具體的實施過程中,系統(tǒng)開始運行后,因為所述消息發(fā)送進程在創(chuàng)建時,是由多個消息應(yīng)用服務(wù)器產(chǎn)生的,而在產(chǎn)生的這些進程之后,就需要檢測這些新創(chuàng)建的進程是否是注冊的進程,即驗證這些進程是否為合法的進程。首先檢查消息發(fā)送進程是否注冊,從數(shù)據(jù)庫中篩選出注冊的消息發(fā)送進程,若發(fā)現(xiàn)沒有注冊的消息發(fā)送進程,進行步驟611,將所述沒有注冊的消息發(fā)送進程注冊,同時對于已經(jīng)注冊的消息發(fā)送進程,進行步驟610 ;步驟610,啟動心跳線程;在具體的實施過程中,心跳線程會每隔一段時間更新消息發(fā)送進程的更新時間,同時在心跳啟動后,心跳線程會隨著消息發(fā)送進程的運行而一直運行,隨著消息發(fā)送進程的結(jié)束而停止。具體來講,所述每隔一段時間可以是事先設(shè)定好的時間,例如,心跳線程通過每30秒更新一次消息發(fā)送進程的更新時間來保持消息發(fā)送進程心跳,需要注意的是,此處所采用的30秒僅僅是本申請實施例中的一種方式,本領(lǐng)域所屬的技術(shù)人員可以根據(jù)實際情況采用其他的間隔時間,如15秒、20秒等等,其相同或相類似的間隔時間均落入本申請的保護范圍之內(nèi)。步驟620,檢測消息發(fā)送進程的狀態(tài);在具體的實施過程中,基于所述步驟620的心跳線程,檢測每個消息發(fā)送進程的狀態(tài),若發(fā)現(xiàn)消息發(fā)送進程狀態(tài)為暫停,進行步驟631,將所述暫停的消息發(fā)送進程的狀態(tài)更新為有效。步驟630,檢查是否是主消息發(fā)送進程;在具體的實施過程中,若當前消息發(fā)送進程不是主消息發(fā)送進程,則直接進行步驟640,啟動任務(wù)發(fā)送器,否則進行步驟641,啟動消息調(diào)度器。步驟641,啟動消息調(diào)度器;在具體的實施過程中,啟動消息調(diào)度器首先確定是否有心跳停止的消息發(fā)送進程;在有心跳停止的消息發(fā)送進程時,為所述心跳停止消息發(fā)送進程中每個心跳停止的消息發(fā)送進程加鎖。同時,判斷所述心跳停止的消息發(fā)送進程中是否有啟動成為狀態(tài)為有效的消息發(fā)送進程;在所述心跳停止的消息發(fā)送進程中有已經(jīng)啟動成為狀態(tài)為有效的進程時,為所述狀態(tài)為有效的消息發(fā)送進程解鎖;在所述心跳停止的消息發(fā)送進程中沒有啟動成為狀態(tài)為有效的進程時,獲得所述沒有成為狀態(tài)為有效的消息發(fā)送進程中的待發(fā)送消息;并將這些待發(fā)送消息重新分配一個狀態(tài)為有效的消息發(fā)送進程;同時,為所述沒有啟動成為狀態(tài)為有效的消息發(fā)送進程解鎖。步驟640,啟動任務(wù)發(fā)送器;在具體的實施過程中,執(zhí)行消息發(fā)送進程即是發(fā)送待發(fā)送消息,同前述步驟240的過程一樣,詳細過程此處就不在贅述。另外,執(zhí)行消息發(fā)送進程后,還需要將非主消息發(fā)送進程中的消息和經(jīng)重新分配后的待發(fā)送消息發(fā)送。以上過程為從進程的角度說明進程的總體流程,對于其主消息發(fā)送進程的消息調(diào)度情況,下面將詳細說明。下面請參考圖7,為本申請實施例中主消息發(fā)送進程的消息調(diào)度的流程步驟700,查詢所有有效的消息發(fā)送進程,并檢查是否有心跳停止的進程;在具體的實施過程中,從消息發(fā)送進程隊列中查詢所有有效的消息發(fā)送進程,并檢查是否有心跳停止的消息發(fā)送進程,其中,對于有效的消息發(fā)送進程,進行步驟701,否則進行步驟710。步驟701,更新心跳停止的消息發(fā)送進程為暫停狀態(tài);在具體的實施過程中,由于有效的消息發(fā)送進程可能包括心跳活躍和心跳停止消息發(fā)送進程,故此步驟是將心跳停止的進程標記為暫停狀態(tài),以便下次查詢就不再查詢到當前消息發(fā)送進程,并且將所屬此暫停狀態(tài)進程的消息也查出來,方便了后續(xù)步驟的進行是否需要重新給這些消息重新分配新的有效進程。所述更新心跳停止的消息發(fā)送進程為暫停狀態(tài)具體包括:在完成步驟701之后,進行步驟711。步驟710,查詢沒有消息發(fā)送進程歸屬的待發(fā)送消息;在具體的實施過程中,查詢沒有消息發(fā)送進程歸屬的待發(fā)送消息具體包括兩種:一種是來自應(yīng)用服務(wù)器新產(chǎn)生的待發(fā)送消息;另一種為來自步驟711的待發(fā)送消息。步驟711,查詢暫停的消息發(fā)送進程所屬的消息;在具體的實施過程中,因該消息發(fā)送進程狀態(tài)為暫停,故查詢所述消息發(fā)送進程攜帶的消息,并將所述消息歸入沒有消息發(fā)送進程歸屬的待發(fā)送消息之中;獲得了來自步驟711的待發(fā)送消息與應(yīng)用服務(wù)器新產(chǎn)生的待發(fā)送消息后,進行步驟 720。步驟720,重新對消息分配消息分配進程;在具體的實施過程中,上述過程與步驟250 —致,此處不再贅述。步驟730,檢測是否有心跳;通過心跳線程,檢測每個消息發(fā)送進程的心跳狀態(tài)。對于有心跳的消息發(fā)送進程,進行步驟740,同時對于心跳停止的消息發(fā)送進程,進行步驟731。步驟731,查詢心跳停止的消息發(fā)送進程的狀態(tài),并加鎖;基于步驟730對每個消息發(fā)送進程的心跳檢測,確定是否有心跳停止的消息發(fā)送進程;在有一個或多個心跳停止的消息發(fā)送進程時,為所述一個或多個心跳停止消息發(fā)送進程中每個心跳停止的消息發(fā)送進程加鎖。步驟740,更新消息所屬消息發(fā)送進程;根據(jù)消息調(diào)度,更新消息所屬的消息發(fā)送進程,其中,所述消息調(diào)度過程與步驟250分配消息發(fā)送進程的過程一致,此處不再贅述步驟741,判斷是否啟動;在具體的實施過程中,在有一個或多個心跳停止消息發(fā)送進程時,為所述一個或多個心跳停止消息發(fā)送進程中每個心跳停止的消息發(fā)送進程加鎖之后,還包括:判斷所述一個或多個心跳停止的消息發(fā)送進程中是否有消息發(fā)送進程已經(jīng)啟動成為狀態(tài)為有效的消息發(fā)送進程;
若后續(xù)啟動了該消息發(fā)送進程,則進行步驟742,否則進行750 ;步驟742,只更新待發(fā)送消息的所屬消息發(fā)送進程,釋放鎖;在具體的實施過程中,在所述一個或多個心跳停止的消息發(fā)送進程中有已經(jīng)啟動成為狀態(tài)為有效的消息發(fā)送進程時,為所述已經(jīng)啟動成為狀態(tài)為有效的消息發(fā)送進程解鎖;同時僅僅只更新新待發(fā)送消息所屬消息發(fā)送進程。步驟750,更新消息所屬消息發(fā)送進程,釋放鎖;在具體的實施過程中,啟動所述消息發(fā)送進程時,為所述已經(jīng)啟動成為狀態(tài)為有效的消息發(fā)送進程解鎖;在所述一個或多個心跳停止的消息發(fā)送進程中沒有已經(jīng)啟動成為狀態(tài)為有效的消息發(fā)送進程時,獲得所述沒有啟動成為狀態(tài)為有效的消息發(fā)送進程中的待發(fā)送消息;給所述沒有啟動成為狀態(tài)為有效的消息發(fā)送進程的待發(fā)送消息中每個待發(fā)送消息分配一個狀態(tài)為有效的消息發(fā)送進程;為所述沒有啟動成為狀態(tài)為有效的消息發(fā)送進程解鎖。在完成步驟750和步驟742之后,進行步驟760。步驟760,發(fā)送待發(fā)送消息;在具體的實施過程中,發(fā)送待發(fā)送消息過程同步驟260 —致,此處不再贅述。下面將對本申請實施例中,消息任務(wù)服務(wù)器內(nèi)部具體的功能結(jié)構(gòu)做具體描述。請參考圖8,為本申請實施例中發(fā)送消息系統(tǒng)的功能模塊圖;如圖所示的發(fā)送消息的系統(tǒng),包括:應(yīng)用服務(wù)器,數(shù)據(jù)庫和消息任務(wù)服務(wù)器,所述應(yīng)用服務(wù)器與至少一個發(fā)送端連接,用于接收和創(chuàng)建待發(fā)送消息,所述數(shù)據(jù)庫與所述應(yīng)用服務(wù)器連接,用于存放所述應(yīng)用服務(wù)器接收和創(chuàng)建的待發(fā)送消息,并將所述待發(fā)送消息以消息隊列的形式保存,所述消息任務(wù)服務(wù)器與所述數(shù)據(jù)連接,用于存放所述消息任務(wù)服務(wù)器中創(chuàng)建的消息發(fā)送進程,在這些消息發(fā)送進程中,包括一個主消息發(fā)送進程,用于對所述消息發(fā)送進程和所述待發(fā)送消息進行調(diào)度。其中,所述主消息發(fā)送進程對應(yīng)的消息任務(wù)服務(wù)器用于:通過所述主消息發(fā)送進程啟動所述主消息發(fā)送進程所在消息任務(wù)服務(wù)器中的消息調(diào)度器;通過所述消息調(diào)度器,從所述數(shù)據(jù)庫的消息隊列中獲得至少一個沒有進程歸屬的待發(fā)送消息;從所述K個消息發(fā)送進程中,為所述至少一個沒有進程歸屬的待發(fā)送消息中每個待發(fā)送消息分配一個消息發(fā)送進程;通過所述K個消息發(fā)送進程發(fā)送所述至少一個沒有進程歸屬的待發(fā)送消息。所述消息任務(wù)服務(wù)器包括:檢測模塊,用于檢查K個消息發(fā)送進程中每個消息發(fā)送進程是否注冊;判斷模塊,用于對于在所述K個消息發(fā)送進程中已經(jīng)注冊的消息發(fā)送進程,通過心跳線程判斷所述已經(jīng)注冊的消息發(fā)送進程中每個消息發(fā)送進程的狀態(tài)是暫停還是有效;還用于對于在所述K個消息發(fā)送進程中未注冊的消息發(fā)送進程,通過心跳線程判斷已經(jīng)注冊的所述未注冊的消息發(fā)送進程中每個消息發(fā)送進程的狀態(tài)是暫停還是有效狀態(tài);更新模塊,用于對于所述已經(jīng)注冊的消息發(fā)送進程中狀態(tài)為暫停的消息發(fā)送進程,更新消息發(fā)送狀態(tài)為有效,還用于對于所述已經(jīng)注冊的所述未注冊的消息發(fā)送進程中狀態(tài)為暫停的消息發(fā)送進程,更新狀態(tài)為有效;注冊模塊,用于對于在所述K個消息發(fā)送進程中未注冊的消息發(fā)送進程,先注冊所述未注冊的消息發(fā)送進程中每個消息發(fā)送進程;確定模塊,用于通過檢查,從所述K個消息發(fā)送進程中確定一個狀態(tài)為有效的消息發(fā)送進程為主消息發(fā)送進程。在具體的實施過程中,所述至少一個沒有進程歸屬的待發(fā)送消息,具體包括:新的待發(fā)送消息和/或歸屬于心跳停止的消息發(fā)送進程的待發(fā)送消息。所述消息任務(wù)服務(wù)器還包括:心跳確定模塊,用于確定是否有心跳停止的消息發(fā)送進程;加鎖模塊,用于在有一個或多個心跳停止的消息發(fā)送進程時,為所述一個或多個心跳停止消息發(fā)送進程中每個心跳停止的消息發(fā)送進程加鎖。所述消息任務(wù)服務(wù)器還包括:心跳判斷模塊,用于判斷所述一個或多個心跳停止的消息發(fā)送進程中是否有消息發(fā)送進程已經(jīng)啟動成為狀態(tài)為有效的消息發(fā)送進程;獲得模塊,用于在所述一個或多個心跳停止消息發(fā)送進程中沒有已經(jīng)啟動成為有效消息發(fā)送進程時,獲得所述沒有啟動成為有效消息發(fā)送進程的歸屬于心跳停止消息發(fā)送進程的待發(fā)送消息;解鎖模塊,用于在所述一個或多個心跳停止消息發(fā)送進程中有已經(jīng)啟動成為有效消息發(fā)送進程的消息發(fā)送進程時,為所述已經(jīng)啟動成為有效消息發(fā)送進程的消息發(fā)送進程解鎖,還用于為所述沒有啟動成為有效消息發(fā)送進程的消息發(fā)送進程解鎖;進程分配模塊,用于給所述沒有啟動成為有效消息發(fā)送進程的消息發(fā)送進程的歸屬于心跳停止消息發(fā)送進程的待發(fā)送消息中,每個待發(fā)送消息分配一個有效消息發(fā)送進程。所述消息任務(wù)服務(wù)器還包括:消息調(diào)度器,用于從所述K個消息發(fā)送進程中,獲取至少一個狀態(tài)為有效的消息發(fā)送進程,將所述至少一個狀態(tài)為有效的消息發(fā)送進程中每個消息發(fā)送進程的ID保存在數(shù)組中,并計算所述至少一個狀態(tài)為有效的消息發(fā)送進程的數(shù)量;將所述至少一個沒有消息發(fā)送進程歸屬的待發(fā)送消息中每個沒有消息發(fā)送進程歸屬的待發(fā)送消息的ID和所述數(shù)量進行取模,獲得取模結(jié)果;根據(jù)所述取模結(jié)果,獲得所述至少一個狀態(tài)為有效的消息發(fā)送進程中一個或多個狀態(tài)為有效的消息發(fā)送進程中每個狀態(tài)為有效的消息發(fā)送進程分配到的一個或多個沒有消息發(fā)送進程歸屬的待發(fā)送消息的ID ;將所述一個或多個沒有消息發(fā)送進程歸屬的待發(fā)送消息的ID對應(yīng)的待發(fā)送消息分配給對應(yīng)的狀態(tài)為有效的消息發(fā)送進程。所述消息任務(wù)服務(wù)器器具體包括:消息發(fā)送器,用于基于消息計劃發(fā)送時間,獲得K個消息發(fā)送進程中每個有效消息發(fā)送進程的一個或多個沒有消息發(fā)送進程歸屬的待發(fā)送消息;對于所述一個或多個沒有消息發(fā)送進程歸屬的待發(fā)送消息中每個待發(fā)送消息,更新消息狀態(tài)為發(fā)送中,更新發(fā)送開始時間;提交每個待發(fā)送消息到發(fā)送隊列;發(fā)送所述每個待發(fā)送消息,并在發(fā)送成功后,更新消息狀態(tài)為發(fā)送成功,更新發(fā)送結(jié)束時間。通過本申請上述的一個或多個實施例,可以實現(xiàn)如下技術(shù)效果:一、通過采用在消息調(diào)度器中調(diào)度處理發(fā)送消息,解決了現(xiàn)有技術(shù)中因消息間競爭而容易造成的死鎖的技術(shù)問題,從而達到了降低消息發(fā)送進程競爭造成死鎖的技術(shù)問題。二、由于在消息分發(fā)的過程中采用了心跳檢測的技術(shù)手段,解決了消息發(fā)送過程中,檢測各個消息發(fā)送進程的有效性,從而達到了及時更新消息發(fā)送進程狀態(tài)的技術(shù)效果。三、通過采用消息調(diào)度器中的消息重分配方法,解決了未發(fā)送完成的消息等待處理的技術(shù)問題,達到了智能的將未發(fā)送完成的消息轉(zhuǎn)移到可用的消息發(fā)送進程上。盡管已描述了本申請的優(yōu)選實施例,但本領(lǐng)域內(nèi)的技術(shù)人員一旦得知了基本創(chuàng)造性概念,則可對這些實施例作出另外的變更和修改。所以,所附權(quán)利要求意欲解釋為包括優(yōu)選實施例以及落入本申請范圍的所有變更和修改。顯然,本領(lǐng)域的技術(shù)人員可以對本申請進行各種改動和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本申請的這些修改和變型屬于本申請權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本申請也意圖包含這些改動和變型在內(nèi)。
權(quán)利要求
1.一種發(fā)送消息的方法,其特征在于,應(yīng)用在包括有數(shù)據(jù)庫,與所述數(shù)據(jù)庫連接的M個應(yīng)用服務(wù)器和與所述數(shù)據(jù)庫連接的至少N個消息任務(wù)服務(wù)器的系統(tǒng)中,其中,所述N個消息任務(wù)服務(wù)器中每個消息任務(wù)服務(wù)器包括有一個消息發(fā)送進程,M為大于或等于I的整數(shù),所述方法包括: 判斷所述N個消息發(fā)送進程中每個消息發(fā)送進程的狀態(tài)是否是有效狀態(tài); 基于所述判斷,從所述N個消息發(fā)送進程中確定K個消息發(fā)送進程的狀為有效狀態(tài),其中,K為大于I但小于等于N的整數(shù); 從所述K個消息發(fā)送進程中,確定一個消息發(fā)送進程作為主消息發(fā)送進程; 通過所述主消息發(fā)送進程啟動所述主消息發(fā)送進程所在消息任務(wù)服務(wù)器中的消息調(diào)度器; 通過所述消息調(diào)度器,從所述數(shù)據(jù)庫的消息隊列中獲得至少一個沒有進程歸屬的待發(fā)送消息; 從所述K個消息發(fā)送進程中,為所述至少一個沒有進程歸屬的待發(fā)送消息中每個待發(fā)送消息分配一個消息發(fā)送進程; 通過所述K個消息發(fā)送進程發(fā)送所述至少一個沒有進程歸屬的待發(fā)送消息。
2.如權(quán)利要求1所述的方法,其特征在于,所述從所述K個消息發(fā)送進程中,確定一個消息發(fā)送進程作為主消息發(fā)送進程,具體包括: 檢查K個消息發(fā)送進程中每個消息發(fā)送進程是否注冊; 對于在所述K個消息發(fā)送進程中已經(jīng)注冊的消息發(fā)送進程,通過心跳線程判斷所述已經(jīng)注冊的消息發(fā)送進程中每個消息發(fā)送進程的狀態(tài)是暫停還是有效; 對于所述已經(jīng)注冊的消息發(fā)送進程中狀態(tài)為暫停的消息發(fā)送進程,更新消息發(fā)送狀態(tài)為有效; 對于在所述K個消息發(fā)送進程中未注冊的消息發(fā)送進程,先注冊所述未注冊的消息發(fā)送進程中每個消息發(fā)送進程,然后通過心跳線程判斷已經(jīng)注冊的所述未注冊的消息發(fā)送進程中每個消息發(fā)送進程的狀態(tài)是暫停還是有效狀態(tài);對于所述已經(jīng)注冊的所述未注冊的消息發(fā)送進程中狀態(tài)為暫停的消息發(fā)送進程,更新狀態(tài)為有效; 通過檢查,從所述K個消息發(fā)送進程中確定一個狀態(tài)為有效的消息發(fā)送進程為主消息發(fā)送進程。
3.如權(quán)利要求1或2所述的方法,其特征在于,所述至少一個沒有進程歸屬的待發(fā)送消息,具體包括:新的待發(fā)送消息和/或歸屬于心跳停止的消息發(fā)送進程的待發(fā)送消息。
4.如權(quán)利要求1或2所述的方法,其特征在于,在所述從所述K個消息發(fā)送進程中,為所述至少一個沒有進程歸屬的待發(fā)送消息中每個待發(fā)送消息分配一個消息發(fā)送進程之后,還包括: 確定是否有心跳停止的消息發(fā)送進程; 在有一個或多個心跳停止的消息發(fā)送進程時,為所述一個或多個心跳停止消息發(fā)送進程中每個心跳停止的消息發(fā)送進程加鎖。
5.如權(quán)利要求4所述的方法,其特征在于,在有一個或多個心跳停止消息發(fā)送進程時,為所述一個或多個心跳停止消息發(fā)送進程中每個心跳停止的消息發(fā)送進程加鎖之后,所述方法還包括:判斷所述一個或多個心跳停止的消息發(fā)送進程中是否有消息發(fā)送進程已經(jīng)啟動成為狀態(tài)為有效的消息發(fā)送進程; 在所述一個或多個心跳停止的消息發(fā)送進程中有已經(jīng)啟動成為狀態(tài)為有效的消息發(fā)送進程時,為所述已經(jīng)啟動成為狀態(tài)為有效的消息發(fā)送進程解鎖; 在所述一個或多個心跳停止的消息發(fā)送進程中沒有已經(jīng)啟動成為狀態(tài)為有效的消息發(fā)送進程時,獲得所述沒有啟動成為狀態(tài)為有效的消息發(fā)送進程中的待發(fā)送消息; 給所述沒有啟動成為狀態(tài)為有效的消息發(fā)送進程的待發(fā)送消息中每個待發(fā)送消息分配一個狀態(tài)為有效的消息發(fā)送進程; 為所述沒有啟動成為狀態(tài)為有效的消息發(fā)送進程解鎖。
6.如權(quán)利要求1所述的方法,其特征在于,從所述K個消息發(fā)送進程中,為所述至少一個沒有進程歸屬的待發(fā)送消息中每個待發(fā)送消息分配一個消息發(fā)送進程,具體包括: 從所述K個消息發(fā)送進程中,獲取至少一個狀態(tài)為有效的消息發(fā)送進程,將所述至少一個狀態(tài)為有效的消息發(fā)送進程中每個消息發(fā)送進程的ID保存在數(shù)組中,并計算所述至少一個狀態(tài)為有效的消息發(fā)送進程的數(shù)量; 將所述至少一個沒有消息發(fā)送進程歸屬的待發(fā)送消息中每個沒有消息發(fā)送進程歸屬的待發(fā)送消息的ID和所述數(shù)量進行取模,獲得取模結(jié)果; 根據(jù)所述取模結(jié)果,獲得所述至少一個狀態(tài)為有效的消息發(fā)送進程中一個或多個狀態(tài)為有效的消息發(fā)送進程中每個狀態(tài)為有效的消息發(fā)送進程分配到的一個或多個沒有消息發(fā)送進程歸屬的待發(fā)送消息的ID ; 將所述一個或多個沒有消息發(fā)送進程歸屬的待發(fā)送消息的ID對應(yīng)的待發(fā)送消息分配給對應(yīng)的狀態(tài)為有效的消息發(fā)送進程。
7.如權(quán)利要求1所述的方法,其特征在于,所述通過所述K個消息發(fā)送進程發(fā)送所述至少一個沒有進程歸屬的待發(fā)送消息,具體包括: 基于消息計劃發(fā)送時間,獲得K個消息發(fā)送進程中每個有效消息發(fā)送進程的一個或多個沒有消息發(fā)送進程歸屬的待發(fā)送消息; 對于所述一個或多個沒有消息發(fā)送進程歸屬的待發(fā)送消息中每個待發(fā)送消息,更新消息狀態(tài)為發(fā)送中,更新發(fā)送開始時間; 提交每個待發(fā)送消息到發(fā)送隊列; 發(fā)送所述每個待發(fā)送消息,并在發(fā)送成功后,更新消息狀態(tài)為發(fā)送成功,更新發(fā)送結(jié)束時間。
8.一種發(fā)送消息的系統(tǒng),其特征在于,包括: M個應(yīng)用服務(wù)器,與至少一個發(fā)送端連接,用于接收所述至少一個發(fā)送端發(fā)送的待發(fā)送消息,其中,所述M個應(yīng)用服務(wù)器中每個應(yīng)用服務(wù)器包括一個消息發(fā)送接口,M為大于或等于I的整數(shù); 數(shù)據(jù)庫,與所述M個應(yīng)用服務(wù)器連接,用于通過每個應(yīng)用服務(wù)器的所述消息發(fā)送,接收所述至少一個待發(fā)送消息,并將所述至少一個待發(fā)送消息放在一消息隊列中; N個消息任務(wù)服務(wù)器,與所述數(shù)據(jù)庫連接,所述N個消息任務(wù)服務(wù)器中每個消息任務(wù)服務(wù)器包括有一個消息發(fā)送進程;其中,所述N個消息發(fā)送進程中有K個消息發(fā)送進程的狀態(tài)為有效狀態(tài),所述K個消息發(fā)送進程中有一個為主消息發(fā)送進程;其中,所述主消息發(fā)送進程對應(yīng)的消息任務(wù)服務(wù)器用于: 通過所述主消息發(fā)送進程啟動所述主消息發(fā)送進程所在消息任務(wù)服務(wù)器中的消息調(diào)度器; 通過所述消息調(diào)度器,從所述數(shù)據(jù)庫的消息隊列中獲得至少一個沒有進程歸屬的待發(fā)送消息; 從所述K個消息發(fā)送進程中,為所述至少一個沒有進程歸屬的待發(fā)送消息中每個待發(fā)送消息分配一個消息發(fā)送進程; 通過所述K個消息發(fā)送進程發(fā)送所述至少一個沒有進程歸屬的待發(fā)送消息。
9.如權(quán)利要求8所述的系統(tǒng),其特征在于,所述消息任務(wù)服務(wù)器包括: 檢測模塊,用于檢查K個消息發(fā)送進程中每個消息發(fā)送進程是否注冊; 判斷模塊,用于對于在所述K個消息發(fā)送進程中已經(jīng)注冊的消息發(fā)送進程,通過心跳線程判斷所述已經(jīng)注冊的消息發(fā)送進程中每個消息發(fā)送進程的狀態(tài)是暫停還是有效;還用于對于在所述K個消息發(fā)送進程中未注冊的消息發(fā)送進程,通過心跳線程判斷已經(jīng)注冊的所述未注冊的消息發(fā)送進程中每個消息發(fā)送進程的狀態(tài)是暫停還是有效狀態(tài); 更新模塊,用于對于所 述已經(jīng)注冊的消息發(fā)送進程中狀態(tài)為暫停的消息發(fā)送進程,更新消息發(fā)送狀態(tài)為有效,還用于對于所述已經(jīng)注冊的所述未注冊的消息發(fā)送進程中狀態(tài)為暫停的消息發(fā)送進程,更新狀態(tài)為有效; 注冊模塊,用于對于在所述K個消息發(fā)送進程中未注冊的消息發(fā)送進程,先注冊所述未注冊的消息發(fā)送進程中每個消息發(fā)送進程; 確定模塊,用于通過檢查,從所述K個消息發(fā)送進程中確定一個狀態(tài)為有效的消息發(fā)送進程為主消息發(fā)送進程。
10.如權(quán)利要求8所述的系統(tǒng),其特征在于,所述消息任務(wù)服務(wù)器還包括: 消息調(diào)度器,用于從所述K個消息發(fā)送進程中,獲取至少一個狀態(tài)為有效的消息發(fā)送進程,將所述至少一個狀態(tài)為有效的消息發(fā)送進程中每個消息發(fā)送進程的ID保存在數(shù)組中,并計算所述至少一個狀態(tài)為有效的消息發(fā)送進程的數(shù)量; 將所述至少一個沒有消息發(fā)送進程歸屬的待發(fā)送消息中每個沒有消息發(fā)送進程歸屬的待發(fā)送消息的ID和所述數(shù)量進行取模,獲得取模結(jié)果; 根據(jù)所述取模結(jié)果,獲得所述至少一個狀態(tài)為有效的消息發(fā)送進程中一個或多個狀態(tài)為有效的消息發(fā)送進程中每個狀態(tài)為有效的消息發(fā)送進程分配到的一個或多個沒有消息發(fā)送進程歸屬的待發(fā)送消息的ID ; 將所述一個或多個沒有消息發(fā)送進程歸屬的待發(fā)送消息的ID對應(yīng)的待發(fā)送消息分配給對應(yīng)的狀態(tài)為有效的消息發(fā)送進程。
全文摘要
本申請?zhí)峁┝艘环N發(fā)送消息的方法及其系統(tǒng),包括判斷N個消息發(fā)送進程中每個消息發(fā)送進程的狀態(tài)是否是有效狀態(tài);基于所述判斷,從N個消息發(fā)送進程中確定K個消息發(fā)送進程的狀為有效狀態(tài),其中K為大于1但小于等于N的整數(shù);從K個消息發(fā)送進程中,確定一個消息發(fā)送進程作為主消息發(fā)送進程;通過主消息發(fā)送進程去啟動主消息發(fā)送進程所在消息任務(wù)服務(wù)器中的消息調(diào)度器;通過消息調(diào)度器,從數(shù)據(jù)庫的消息隊列中獲得至少一個沒有進程歸屬的待發(fā)送消息;從K個消息發(fā)送進程中,為至少一個沒有進程歸屬的待發(fā)送消息中每個待發(fā)送消息分配一個消息發(fā)送進程;通過K個消息發(fā)送進程發(fā)送至少一個沒有進程歸屬的待發(fā)送消息。
文檔編號G06F9/46GK103207806SQ20121000902
公開日2013年7月17日 申請日期2012年1月12日 優(yōu)先權(quán)日2012年1月12日
發(fā)明者韓翼 申請人:阿里巴巴集團控股有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1