專利名稱:一種消息訂閱系統(tǒng)以及消息發(fā)送方法
技術(shù)領(lǐng)域:
本申請涉及數(shù)據(jù)處理技術(shù)領(lǐng)域,尤其涉及一種消息訂閱系統(tǒng)以及消息發(fā)送方法。
背景技術(shù):
在消息訂閱系統(tǒng)中,消息的發(fā)布一般都基于消息中間件服務(wù)器實現(xiàn),即消息發(fā)布服務(wù)器將消息發(fā)送到消息中間件服務(wù)器,由該消息中間件服務(wù)器將該消息發(fā)布到各個消息消息接收終端。實際應(yīng)用中,為了滿足眾多消息的發(fā)布需求,消息訂閱系統(tǒng)中一般部署多臺消息中間件服務(wù)器,每個消息中間件服務(wù)器都承擔(dān)向不同消息接收終端投遞不同消息的任務(wù)。 傳統(tǒng)消息訂閱系統(tǒng)如圖1所示,該消息訂閱系統(tǒng)包括消息發(fā)布服務(wù)器101、消息中間件服務(wù)器102 (可能為多臺,圖1僅示出了 2個)以及消息接收終端103 (可能為多個,圖1僅示出了 4個)?;趫D1所示的消息訂閱系統(tǒng),實現(xiàn)消息發(fā)送的過程,如圖2所示,包括如下步驟步驟201、消息發(fā)布服務(wù)器101將消息發(fā)送到其中一個消息中間件服務(wù)器102 ;步驟202、消息中間件服務(wù)器102接收消息后,保存該消息,并將該消息加入消息發(fā)送隊列;步驟203、根據(jù)消息發(fā)送隊列中該消息對應(yīng)的消息接收終端103的地址列表,依次向各消息消息接收終端103發(fā)送保存的消息;步驟204、消息中間件服務(wù)器102判斷當(dāng)前發(fā)送的消息是否發(fā)送成功,若是,則執(zhí)行步驟205,若否,則執(zhí)行步驟206 ;步驟205、刪除保存的該消息,至此,結(jié)束當(dāng)前消息的發(fā)送流程。步驟206、將本次發(fā)送失敗的消息加入消息發(fā)送隊列,至此,結(jié)束當(dāng)前消息的發(fā)送流程。根據(jù)以上流程,在傳統(tǒng)消息訂閱系統(tǒng)中,消息中間件服務(wù)器102對消息的處理策略是消息到達后立即發(fā)送。這種發(fā)送模式雖然提高了系統(tǒng)吞吐率,但在實際應(yīng)用場景中,消息發(fā)布服務(wù)器101發(fā)布的消息可能對應(yīng)不同的業(yè)務(wù)流程以及不同的消息接收終端,一個業(yè)務(wù)流程對應(yīng)的多個消息需要按照設(shè)定順序發(fā)送并且按照設(shè)定順序到達消息接收終端103, 才能保證業(yè)務(wù)執(zhí)行的成功率。例如,一個交易類型的網(wǎng)站基于消息訂閱系統(tǒng)處理一個業(yè)務(wù)流程下的用戶訂單,當(dāng)用戶訂單從當(dāng)前狀態(tài)變化到新狀態(tài)時,需要通過消息發(fā)布服務(wù)器101 發(fā)送一個消息出去,該消息用于標(biāo)識用戶訂單的新狀態(tài)。對于此類應(yīng)用場景,需要將該業(yè)務(wù)流程下根據(jù)用戶訂單的狀態(tài)跳轉(zhuǎn)情況依次生成的消息發(fā)送到消息接收終端,這樣才能保證交易的正常進行,如果消息未按照生成順序到達消息接收終端,可能導(dǎo)致訂單狀態(tài)的混亂, 從而使得該業(yè)務(wù)流程無法正常完成。而在實踐過程中發(fā)現(xiàn),消息訂閱系統(tǒng)一般都包括多個消息中間件服務(wù)器,消息發(fā)布服務(wù)器在發(fā)送消息時,未考慮該消息對應(yīng)的業(yè)務(wù)流程以及消息接收終端,即從消息發(fā)布服務(wù)器發(fā)送出去的消息可能會到達不同的消息中間件服務(wù)器,并且各消息中間件服務(wù)器在收到消息后,會盡快將該消息發(fā)送出去,因此,基于傳統(tǒng)消息訂閱系統(tǒng)實現(xiàn)的消息發(fā)送流程,存在消息接收終端接收到同一業(yè)務(wù)流程的多個消息的順序與消息發(fā)布服務(wù)器發(fā)送各消息的順序不一致的問題,從而導(dǎo)致業(yè)務(wù)流程混亂甚至無法正常執(zhí)行。
發(fā)明內(nèi)容
有鑒于此,本申請實施例提供一種消息訂閱系統(tǒng)以及消息發(fā)送方法,用于解決現(xiàn)有技術(shù)中存在的消息接收終端接收到同一業(yè)務(wù)流程的多個消息的順序與消息發(fā)布服務(wù)器發(fā)送各消息的順序不一致的問題。本申請實施例通過如下技術(shù)方案實現(xiàn)根據(jù)本申請實施例的一個方面,提供了一種消息發(fā)送方法,包括第一消息中間件服務(wù)器接收消息發(fā)布服務(wù)器發(fā)送的攜帶類別標(biāo)識以及對應(yīng)的消息發(fā)送順序信息的消息,并將接收的所述消息保存至設(shè)定位置;其中,對應(yīng)同一類別標(biāo)識的多個消息對應(yīng)同一業(yè)務(wù)流程以及同一消息接收終端,并且在所述消息發(fā)布服務(wù)器中按照對應(yīng)的消息發(fā)送順序發(fā)送;第二消息中間件服務(wù)器確定所述設(shè)定位置存在需要當(dāng)前發(fā)送的消息后,獲取所述消息,并在確定所述消息滿足設(shè)定的消息發(fā)送條件后,按照所述消息攜帶的發(fā)送順序信息, 將所述消息發(fā)送至與所述類別標(biāo)識對應(yīng)的消息接收終端。根據(jù)本申請實施例的另一個方面,還提供了一種消息訂閱系統(tǒng),包括消息發(fā)布服務(wù)器,用于為對應(yīng)同一業(yè)務(wù)流程以及同一消息接收終端的多個消息分配同一類別標(biāo)識,并將分配的所述類別標(biāo)識以及該消息對應(yīng)的消息發(fā)送順序信息攜帶在所述消息中按照對應(yīng)的消息發(fā)送順序發(fā)送;第一消息中間件服務(wù)器,用于接收所述消息發(fā)布服務(wù)器發(fā)送的攜帶類別標(biāo)識以及對應(yīng)的消息發(fā)送順序信息的消息,并將接收的所述消息保存至設(shè)定位置;第二消息中間件服務(wù)器,用于在確定所述設(shè)定位置存在需要當(dāng)前發(fā)送的消息后, 獲取所述消息,并在確定所述消息滿足設(shè)定的消息發(fā)送條件后,按照所述消息攜帶的發(fā)送順序信息,將所述消息發(fā)送至與所述類別標(biāo)識對應(yīng)的消息接收終端。通過本申請實施例提供的上述至少一個技術(shù)方案,第一消息中間件服務(wù)器接收消息發(fā)布服務(wù)器發(fā)送的攜帶類別標(biāo)識以及對應(yīng)的消息發(fā)送順序信息的消息,并將接收的消息保存至設(shè)定位置;其中,對應(yīng)同一類別標(biāo)識的多個消息對應(yīng)同一業(yè)務(wù)流程以及同一消息接收終端,并且在消息發(fā)布服務(wù)器中按照對應(yīng)的消息發(fā)送順序消息發(fā)送;第二消息中間件服務(wù)器確定該設(shè)定位置存在需要當(dāng)前發(fā)送的消息后,獲取該消息,并在確定該消息滿足設(shè)定的消息發(fā)送條件后,按照該消息攜帶的發(fā)送順序信息,將該消息發(fā)送至與該類別標(biāo)識對應(yīng)的消息接收終端。根據(jù)該技術(shù)方案,消息發(fā)布服務(wù)器在發(fā)送消息時根據(jù)該消息對應(yīng)的業(yè)務(wù)流程以及消息接收終端為該消息分配類別標(biāo)識,第一消息中間件服務(wù)器在接收到消息后保存,由第二消息中間件服務(wù)器在確定該消息滿足設(shè)定的消息發(fā)送條件后,按照該消息的發(fā)送順序發(fā)送該消息。從而使得消息接收終端能夠按照消息發(fā)布服務(wù)器發(fā)送該類別標(biāo)識對應(yīng)的各消息的順序,接收到對應(yīng)同一業(yè)務(wù)流程的各個消息。本申請的其它特征和優(yōu)點將在隨后的說明書中闡述,并且,部分地從說明書中變得顯而易見,或者通過實施本申請而了解。本申請的目的和其他優(yōu)點可通過在所寫的說明書、權(quán)利要求書、以及附圖中所特別指出的結(jié)構(gòu)來實現(xiàn)和獲得。
附圖用來提供對本申請的進一步理解,并且構(gòu)成說明書的一部分,與本申請實施例一起用于解釋本申請,并不構(gòu)成對本申請的限制。在附圖中圖1為現(xiàn)有技術(shù)中的消息訂閱系統(tǒng)示意圖;圖2為現(xiàn)有技術(shù)中實現(xiàn)訂閱消息發(fā)送的流程圖;圖3為本申請系統(tǒng)實施例提供的消息訂閱系統(tǒng)示意圖;圖4為本發(fā)明方法實施例提供的消息發(fā)送流程圖;圖5為本發(fā)明方法實施例一提供的消息發(fā)送流程圖;圖6為本發(fā)明方法實施例二提供的消息發(fā)送流程圖;圖7為本發(fā)明方法實施例二提供的又一消息發(fā)送流程圖;圖8為本發(fā)明方法實施例三提供的消息發(fā)送流程圖。
具體實施例方式為了給出保證消息接收終端接收到同一業(yè)務(wù)流程的多個消息的順序與消息發(fā)布服務(wù)器發(fā)送各消息的順序一致的實現(xiàn)方案,本申請實施例提供了一種消息訂閱系統(tǒng)以及消息發(fā)送方法,該技術(shù)方案可以應(yīng)用于訂閱消息發(fā)送的過程,既可以實現(xiàn)為一種系統(tǒng),也可以實現(xiàn)為一種方法。以下結(jié)合說明書附圖對本申請的優(yōu)選實施例進行說明,應(yīng)當(dāng)理解,此處所描述的優(yōu)選實施例僅用于說明和解釋本申請,并不用于限定本申請。并且在不沖突的情況下,本申請中的實施例及實施例中的特征可以相互組合。系統(tǒng)實施例本申請系統(tǒng)實施例提供了一種消息訂閱系統(tǒng),如圖3所示,該消息訂閱系統(tǒng)包括消息發(fā)布服務(wù)器301、第一消息中間件服務(wù)器302(可能為多臺,圖中示出兩臺作為示例)、第二消息中間件服務(wù)器303(可能為多臺,圖中示出兩臺作為示例)。該系統(tǒng)中, 第一消息中間件服務(wù)器302主要用于接收消息,第二消息中間件服務(wù)器303主要用于發(fā)送消息。其中消息發(fā)布服務(wù)器301,用于將同一業(yè)務(wù)流程產(chǎn)生的消息按照消息的生成順序發(fā)送, 發(fā)送的消息中攜帶消息接收終端的地址信息、為該消息生成的類別標(biāo)識以及該消息對應(yīng)的發(fā)送順序信息;第一消息中間件服務(wù)器302,用于接收消息發(fā)布服務(wù)器301發(fā)送的攜帶類別標(biāo)識以及發(fā)送順序的消息,并將接收的消息保存至設(shè)定位置;第二消息中間件服務(wù)器303,用于在確定設(shè)定位置存在需要當(dāng)前發(fā)送的消息后,獲取該消息,并在確定該消息滿足設(shè)定的消息發(fā)送條件時,按照該消息對應(yīng)的發(fā)送順序發(fā)送該消息至對應(yīng)的消息接收終端。具體地,消息發(fā)布服務(wù)器301發(fā)送的消息中,消息的發(fā)送順序信息用于標(biāo)識該消息在所對應(yīng)的業(yè)務(wù)流程中的發(fā)送順序,也即消息的生成順序,消息的發(fā)送順序信息可以為按照消息的實際發(fā)送順序?qū)?yīng)的順序標(biāo)號,也可以為消息類型信息(業(yè)務(wù)流程中各類型消息的發(fā)送順序通常是固定的)。具體地,消息發(fā)布服務(wù)器301生成的類別標(biāo)識用于標(biāo)識消息對應(yīng)的業(yè)務(wù)流程,即消息發(fā)布服務(wù)器301在發(fā)送消息之前,為對應(yīng)同一業(yè)務(wù)流程的多個消息分配同一類別標(biāo)識,實際應(yīng)用中,類別標(biāo)識的形式可以靈活設(shè)定,只要保證對應(yīng)同一業(yè)務(wù)流程的消息具有相同的類別標(biāo)識,對應(yīng)不同業(yè)務(wù)流程的消息具有不同的類別標(biāo)識即可。實際應(yīng)用中,消息的類別標(biāo)識可以為根據(jù)消息所對應(yīng)的業(yè)務(wù)流程的相關(guān)信息計算得到的哈希值。具體地,第二消息中間件服務(wù)器303在確定該消息滿足設(shè)定的消息發(fā)送條件,以及按照該消息對應(yīng)的發(fā)送順序發(fā)送該消息,可以采用如下方式方式一保存該消息,在確定將與獲取的該消息為同一類別標(biāo)識的所有消息獲取完畢后 (即設(shè)定的消息發(fā)送條件),根據(jù)對應(yīng)該類別標(biāo)識的各消息攜帶的發(fā)送順序信息生成發(fā)送隊列,并依次發(fā)送消息。方式二在消息發(fā)送過程中維護一個消息發(fā)送記錄,接收到該消息后,通過查找該消息發(fā)送記錄,在確定發(fā)送順序在該消息的發(fā)送順序之前的消息均已發(fā)送(即設(shè)定的消息發(fā)送條件),則發(fā)送該消息,否則先保存該消息,等待發(fā)送順序在該消息的發(fā)送順序之前的消息全部發(fā)送完畢后,發(fā)送該消息。圖3所示的消息訂閱系統(tǒng)中,第二消息中間件服務(wù)器303的數(shù)量可以根據(jù)單位時間內(nèi)消息發(fā)布服務(wù)器301發(fā)送的消息的數(shù)量進行動態(tài)調(diào)整,例如,在某段時間內(nèi)消息發(fā)布服務(wù)器301發(fā)送的消息的數(shù)量超過第一設(shè)定閾值時,可以增加該消息訂閱系統(tǒng)種第二消息中間件服務(wù)器303的數(shù)量,以提高對訂閱消息發(fā)送的及時性;在某段時間內(nèi)消息發(fā)布服務(wù)器301發(fā)送的訂閱消息的數(shù)量低于第二設(shè)定閾值時,可以減少該消息訂閱系統(tǒng)種第二消息中間件服務(wù)器303的數(shù)量,以避免服務(wù)器資源的閑置,提高服務(wù)器資源的利用率。優(yōu)選地, 第一設(shè)定閾值以及第二設(shè)定閾值的大小可以根據(jù)第二消息中間件服務(wù)器303的數(shù)量M以及每個第二消息中間件服務(wù)器303的在單位時間內(nèi)能處理的消息的數(shù)量N確定。例如,該第一設(shè)定閾值可以等于M*N或略大于M*N或略小于M*N ;該第二設(shè)定閾值可以等于(M-I) *N或略大于(M-1)*N或略小于(M-1)*N,即如果單位時間內(nèi)消息發(fā)布服務(wù)器301發(fā)送的消息的數(shù)量大于所有第二消息中間件服務(wù)器303所能處理的消息的總數(shù)(即第一設(shè)定閾值),則可以增加消息訂閱系統(tǒng)中的第二消息中間件服務(wù)器303的數(shù)量;如果單位時間內(nèi)消息發(fā)布服務(wù)器301發(fā)送的消息的數(shù)量小于在減少一個第二消息中間件服務(wù)器303的情況下所有第二消息中間件服務(wù)器303所能處理消息的總數(shù)(即第二設(shè)定閾值),則可以減少消息訂閱系統(tǒng)中的第二消息中間件服務(wù)器303的數(shù)量。應(yīng)當(dāng)理解的是,此處對于第一設(shè)定閾值以及第二設(shè)定閾值的取值僅為實施本發(fā)明優(yōu)選實施例的舉例,實際應(yīng)用中,該第一設(shè)定閾值以及第二設(shè)定閾值可以靈活設(shè)置,只要能夠保證單位時間內(nèi)消息發(fā)布服務(wù)器301發(fā)送的訂閱消息能夠得到及時處理,并且不會造成訂閱消息積壓或第二消息中間件服務(wù)器303資源被大量浪費即可。根據(jù)本申請實施例中第一消息中間件服務(wù)器302保存接收的消息的設(shè)定位置的不同,第二消息中間件服務(wù)器303對應(yīng)的處理過程也有所不同,具體地,第一消息中間件服務(wù)器302保存接收的消息可以采用如下任一方式
方式一將接收的消息保存至本地存儲設(shè)備,例如,本地硬盤等。方式二將接收的消息保存至設(shè)置的用于存儲消息的消息存儲服務(wù)器,該消息存儲服務(wù)器通常具有較高的配置,保存消息的可靠性較高。方式三確定接收的消息對應(yīng)的可靠性要求,在可靠性要求滿足設(shè)定可靠性要求時,將該消息保存至消息存儲服務(wù)器,否則,將該消息保存至本地存儲設(shè)備。其中,設(shè)定可靠性要求可以根據(jù)實際業(yè)務(wù)需求進行設(shè)置,例如,對于重要業(yè)務(wù)流程產(chǎn)生的消息,可以選擇存儲至消息存儲服務(wù)器以保證消息存儲的可靠性,設(shè)定的可靠性要求可以為此類重要業(yè)務(wù)流程對應(yīng)的類別標(biāo)識。以下分別結(jié)合不同的系統(tǒng)實施例,對消息訂閱系統(tǒng)的詳細實現(xiàn)過程進行說明。系統(tǒng)實施例一該系統(tǒng)實施例一中,圖3所示的系統(tǒng)中包括的第一消息中間件服務(wù)器302具體用于將接收的消息保存至本地存儲設(shè)備(即第一消息中間件服務(wù)器302保存接收的消息采用上述方式一)。該系統(tǒng)實施例一中,由于第一消息中間件服務(wù)器302是將接收的消息存儲在本地存儲設(shè)備中,基于此,第一消息中間件服務(wù)器302在保存接收的消息后,還需要向第二消息中間件服務(wù)器303發(fā)送消息發(fā)送通知,即通知第二消息中間件服務(wù)器303有消息需要發(fā)送。該第一消息中間件服務(wù)器302在實現(xiàn)消息發(fā)送通知功能時,具體用于根據(jù)保存的各第二消息中間件服務(wù)器303與類別標(biāo)識的對應(yīng)關(guān)系,向與接收的該消息攜帶的類別標(biāo)識對應(yīng)的第二消息中間件服務(wù)器303發(fā)送消息發(fā)送通知,該消息發(fā)送通知中包括該消息的存儲位置信息。該第一消息中間件服務(wù)器302在實現(xiàn)消息發(fā)送通知功能時所涉及的更為詳細的處理流程將在后續(xù)與該系統(tǒng)實施例對應(yīng)的方法實施例中詳細描述,此處暫不描述。圖3所示的系統(tǒng)中包括的第二消息中間件服務(wù)器303,具體用于在接收到第一消息中間件服務(wù)器302發(fā)送的消息發(fā)送通知后,確定有待發(fā)送消息,并根據(jù)該消息發(fā)送通知中包括的存儲位置信息,獲取該消息。基于上述處理方式,該第二消息中間件服務(wù)器303采用被動的方式獲取消息,通過該方式,第二消息中間件服務(wù)器303能夠基于第一消息中間件服務(wù)器302發(fā)送的消息發(fā)送通知,及時地獲取該消息并進行處理,從而能夠及時地處理消息。根據(jù)本申請實施例一,第二消息中間件服務(wù)器303在獲取到需要發(fā)送的消息后, 需要在確定該消息滿足設(shè)定發(fā)送條件時才發(fā)送該消息,具體地,第二消息中間件服務(wù)器 303,在采用上述方式一確定該消息滿足設(shè)定發(fā)送條件,以及按照該消息對應(yīng)的發(fā)送順序發(fā)送該消息時,具體用于根據(jù)保存的各類別標(biāo)識分別對應(yīng)的消息數(shù)量,在確定獲取到的當(dāng)前類別標(biāo)識對應(yīng)的消息數(shù)量與保存的當(dāng)前類別標(biāo)識對應(yīng)的消息數(shù)量一致時,確定將與獲取的該消息為同一類別標(biāo)識的所有消息獲取完畢后,即該消息滿足設(shè)定的發(fā)送條件,進一步根據(jù)獲取的當(dāng)前類別標(biāo)識對應(yīng)的各消息中攜帶的發(fā)送順序信息發(fā)送各消息。
該第二消息中間件服務(wù)器303在實現(xiàn)上述判斷功能時所涉及的更為詳細的處理流程將在后續(xù)與該系統(tǒng)實施例對應(yīng)的方法實施例中詳細描述,此處暫不描述。根據(jù)本申請實施例一,第二消息中間件服務(wù)器303在確定接收的消息滿足消息的發(fā)送條件時,進一步按照設(shè)定順序發(fā)送對應(yīng)同一類別標(biāo)識的所有消息。具體地,第二消息中間件服務(wù)器303,在實現(xiàn)消息發(fā)送功能時,具體用于獲取該類別標(biāo)識對應(yīng)的各消息中攜帶的消息發(fā)送順序信息;根據(jù)獲取的各消息對應(yīng)的消息發(fā)送順序信息,依次發(fā)送各消息。具體地,若獲取的消息發(fā)送順序信息為與消息的發(fā)送順序?qū)?yīng)的順序標(biāo)號,則按照順序標(biāo)號依次發(fā)送各消息,例如,與消息的發(fā)送順序?qū)?yīng)的順序標(biāo)號為1、2……5,則對應(yīng)順序標(biāo)號為1的消息第一個發(fā)送,對應(yīng)順序標(biāo)號為5的消息最后一個發(fā)送;若獲取的消息發(fā)送順序信息為消息的消息類型信息,則根據(jù)保存的各類別標(biāo)識對應(yīng)的各消息類型信息,確定獲取的消息對應(yīng)的消息類型的發(fā)送順序,并按照確定的順序發(fā)送該消息。該第二消息中間件服務(wù)器303在實現(xiàn)上述消息發(fā)送功能時所涉及的更為詳細的處理流程將在后續(xù)與該系統(tǒng)實施例對應(yīng)的方法實施例中詳細描述,此處暫不描述?;谠撓到y(tǒng)實施例一提供的技術(shù)方案,第一消息中間件服務(wù)器302在接收到消息發(fā)布服務(wù)器301發(fā)送的消息后,將該消息保存在本地存儲設(shè)備,并在保存消息后,及時通知第二消息中間件服務(wù)器303進行處理。該第二消息中間件服務(wù)器303在接收到第一消息中間件服務(wù)器302發(fā)送的消息發(fā)送通知后,獲取該消息,并在該消息滿足消息發(fā)送條件時,發(fā)送該消息,從而保證消息接收終端能夠按照消息在消息發(fā)布服務(wù)器301中的發(fā)送順序接收到各消息。系統(tǒng)實施例二該系統(tǒng)實施例二中,圖3所示的系統(tǒng)中包括的第一消息中間件服務(wù)器302具體用于將接收的消息保存至消息存儲服務(wù)器,該消息存儲服務(wù)器可以為獨立于各第一消息中間件服務(wù)器302的服務(wù)器,用于存儲消息(即第一消息中間件服務(wù)器302保存接收的消息采用上述方式二)??蛇x地,該第一消息中間件服務(wù)器302還用于向第二消息中間件服務(wù)器303發(fā)送消息發(fā)送通知,即通知第二消息中間件服務(wù)器303有消息需要發(fā)送。該第一消息中間件服務(wù)器302在實現(xiàn)消息發(fā)送通知功能時的具體過程,已在上述系統(tǒng)實施例一中詳細描述,此處不再贅述。在第一消息中間件服務(wù)器302發(fā)送消息發(fā)送通知的情況下,圖3所示的系統(tǒng)中包括的第二消息中間件服務(wù)器303,具體用于在接收到第一消息中間件服務(wù)器302發(fā)送的消息發(fā)送通知后,確定有待發(fā)送消息,并根據(jù)該消息發(fā)送通知中包括的存儲位置信息,獲取該消息?;谏鲜鎏幚矸绞剑摰诙⒅虚g件服務(wù)器303采用被動的方式獲取消息,通過該方式,第二消息中間件服務(wù)器303能夠基于第一消息中間件服務(wù)器302發(fā)送的消息發(fā)送通知,及時地獲取該消息并進行處理,從而提高了消息處理的及時性。該系統(tǒng)實施例二中,由于第一消息中間件服務(wù)器302是將接收的所有消息都發(fā)送至同一的消息存儲服務(wù)器中,因此,該第一消息中間件服務(wù)器302在保存接收的消息后,可以不針對接收的每一條消息向第二消息中間件服務(wù)器303發(fā)送通知,而是由第二消息中間件服務(wù)器303周期性輪詢消息存儲服務(wù)器以確定是否有需要當(dāng)前發(fā)送的消息。采用該方式,可以減少第一消息中間件服務(wù)器302和第二消息中間件服務(wù)器303之間的信令開銷,尤其在第一消息中間件服務(wù)器302的數(shù)量較多,并且接收的消息較多的情況下,更適合采用該方式。具體地,第二消息中間件服務(wù)器303,具體用于采用如下方式一或方式二在確定有需要當(dāng)前發(fā)送消息方式一周期性輪詢該消息存儲服務(wù)器,若消息存儲服務(wù)器中保存有未被發(fā)送的消息,則根據(jù)該消息存儲服務(wù)器保存的消息發(fā)送記錄,確定該未被發(fā)送的消息是否為需要當(dāng)前發(fā)送的消息。具體地,該消息發(fā)送記錄,包括已被獲取的消息的類別標(biāo)識與獲取該消息的第二消息中間件服務(wù)器303的標(biāo)識的對應(yīng)關(guān)系。相應(yīng)地,根據(jù)該消息存儲服務(wù)器保存的消息發(fā)送記錄,確定該未被發(fā)送的消息是否為需要當(dāng)前發(fā)送的消息,即若消息發(fā)送記錄中存在該未被發(fā)送的消息的類別標(biāo)識對應(yīng)的相關(guān)記錄,則進一步根據(jù)該記錄確定與該類別標(biāo)識對應(yīng)的第二消息中間件服務(wù)器303的標(biāo)識是否為自身標(biāo)識, 若是,則確定該消息為需要當(dāng)前發(fā)送的消息并獲取,若否,則確定該消息不是需要當(dāng)前發(fā)送的消息;若消息發(fā)送記錄中不存在該未被發(fā)送的消息的類別標(biāo)識對應(yīng)的相關(guān)記錄,則確定該消息為需要當(dāng)前發(fā)送的消息并獲取。實際應(yīng)用中,采用該方式,若分類標(biāo)識類別標(biāo)識為哈希值(如果不是哈希值,可以通過哈希算法計算得到一個哈希值),則可以預(yù)先將所有分類標(biāo)識類別標(biāo)識構(gòu)成的整個范圍分成比較多的段,第二消息中間件服務(wù)器303在每次輪詢消息存儲服務(wù)器中的消息時, 在當(dāng)前沒有被其它第二消息中間件服務(wù)器303鎖定的段中選擇至少一個段,并鎖定該選擇的段,而后來的第二消息中間件服務(wù)器303就不能再選擇已被鎖定的這些段了。該方式保證了不會出現(xiàn)有消息重復(fù)發(fā)送的情況。并且,在此基礎(chǔ)上,每個第二消息中間件服務(wù)器303 都會定時檢查當(dāng)前集群中第二消息中間件服務(wù)器303的數(shù)量,以及自己所鎖定的分段的數(shù)量,如果超過了平均的分段的數(shù)量,則釋放部分鎖定的段,讓其它第二消息中間件服務(wù)器 303來處理,以達到負(fù)載的均衡,另外一方面,也會檢查自己是否需要承擔(dān)更多的分段的任務(wù)。采用上述方式一,能夠更加靈活地處理消息分類標(biāo)識類別標(biāo)識增加或減少的情況,從而靈活地實現(xiàn)消息訂閱系統(tǒng)中的負(fù)載均衡。方式二周期性輪詢該消息存儲服務(wù)器,若該消息存儲服務(wù)器保存的消息攜帶的類別標(biāo)識屬于預(yù)先為該第二消息中間件服務(wù)器303分配的類別標(biāo)識,則確定有需要當(dāng)前發(fā)送的消肩、ο實際應(yīng)用中,采用該方式,若分類標(biāo)識類別標(biāo)識為哈希值(如果不是哈希值,可以通過哈希算法計算得到一個哈希值),則可以預(yù)先將所有分類標(biāo)識類別標(biāo)識構(gòu)成的整個范圍分成比較多的段,并預(yù)先為每個第二消息中間件服務(wù)器303分配要處理的分段,實現(xiàn)簡
單、可靠。根據(jù)本申請實施例二,第二消息中間件服務(wù)器303在獲取到需要發(fā)送的消息后,需要判斷該消息是否滿足設(shè)定的發(fā)送條件,并在判斷該消息滿足設(shè)定的發(fā)送條件時,按照該消息的發(fā)送順序發(fā)送該消息,該過程所涉及的具體過程已在上述系統(tǒng)實施例一中詳細描述,此處不再贅述。根據(jù)本申請系統(tǒng)實施例二提供的技術(shù)方案,第一消息中間件服務(wù)器302在接收到消息發(fā)布服務(wù)器301發(fā)送的消息后,將該消息保存在消息存儲服務(wù)器中,以方便對消息的統(tǒng)一管理與獲取。該第一消息中間件服務(wù)器302可以選擇向第二消息中間件服務(wù)器303發(fā)送消息發(fā)送通知,以保證消息發(fā)送的及時性,也可以不發(fā)送消息發(fā)送通知,以減少第一消息中間件服務(wù)器302和第二消息中間件服務(wù)器303之間的信令開銷。該第二消息中間件服務(wù)器303可以在接收到第一消息中間件服務(wù)器302發(fā)送的消息發(fā)送通知后獲取該消息,或者通過周期性輪詢消息存儲服務(wù)器確定該消息存儲服務(wù)器中保存有需要當(dāng)前發(fā)送的消息時獲取該消息,并在該消息滿足設(shè)定的消息發(fā)送條件時發(fā)送該消息,從而保證消息接收終端能夠按照消息在消息發(fā)布服務(wù)器301中的發(fā)送順序接收到各消息。系統(tǒng)實施例三該系統(tǒng)實施例三中,圖3所示的系統(tǒng)中包括的第一消息中間件服務(wù)器302具體用于確定接收的消息對應(yīng)的可靠性要求,在滿足設(shè)定的可靠性要求時,將該消息保存至消息存儲服務(wù)器,否則,將該消息保存至本地存儲設(shè)備(即第一消息中間件服務(wù)器302保存接收的消息采用上述方式三)。該第一消息中間件服務(wù)器302在確定消息的存儲位置時所涉及的更為詳細的處理流程將在后續(xù)與該系統(tǒng)實施例對應(yīng)的方法實施例中詳細描述,此處暫不描述。在此基礎(chǔ)上,該第一消息中間件服務(wù)器302還用于向第二消息中間件服務(wù)器303發(fā)送消息發(fā)送通知,即通知第二消息中間件服務(wù)器 303有消息需要發(fā)送。該第一消息中間件服務(wù)器302在實現(xiàn)消息發(fā)送通知功能時的具體過程,已在上述系統(tǒng)實施例一中詳細描述,此處不再贅述。該實施例三中,圖3所示的系統(tǒng)中包括的第二消息中間件服務(wù)器303所實現(xiàn)的具體功能與上述實施例一中所述的第二消息中間件服務(wù)器303所實現(xiàn)的具體功能一致,此處不再贅述。基于該系統(tǒng)實施例三提供的技術(shù)方案,在達到上述系統(tǒng)實施例一所述的技術(shù)效果的基礎(chǔ)之上,由于該實施例中第一消息中間件服務(wù)器302在接收到消息后,能夠進一步針對該消息要求的可靠性,靈活選擇消息的存儲位置。在消息可靠性要求較高,即滿足設(shè)定的可靠性要求時,可以選擇將該消息保存至專門用于存儲消息的消息存儲服務(wù)器,以提高消息的安全性;在消息可靠性要求較低,即不滿足設(shè)定的可靠性要求時,可以選擇將該消息保存在本地存儲設(shè)備,以減少保存消息所耗費的網(wǎng)絡(luò)資源,并且能夠提供保存消息的效率。本申請?zhí)峁┑纳鲜鱿到y(tǒng)實施例中,通過將消息中間件服務(wù)器中接收消息和發(fā)送消息的職責(zé)分離,由第一消息中間件服務(wù)器302承擔(dān)接收消息的職責(zé),即負(fù)責(zé)接收到消息并保存至指定存儲位置。第一消息中間件服務(wù)器302可以接收對應(yīng)任意類別標(biāo)識的消息,這樣的設(shè)計,可以提升整個消息訂閱系統(tǒng)的可用性和可靠性。并且,專門用于接收消息的第一消息中間件服務(wù)器302主要和消息發(fā)布服務(wù)器301進行交互,專門用于發(fā)送消息的第二消息中間件服務(wù)器303主要和消息接收終端進行交互。這樣的方式,也降低了消息訂閱系統(tǒng)對耦合度的要求。
方法實施例與上述系統(tǒng)實施例對應(yīng),本發(fā)明實施例還提供了一種基于上述系統(tǒng)實施例提供的消息訂閱系統(tǒng)實現(xiàn)的消息發(fā)送方法。如圖4所示,基于圖3所示的消息訂閱系統(tǒng)實現(xiàn)的消息發(fā)送方法,主要包括如下步驟步驟401、消息發(fā)布服務(wù)器301發(fā)送攜帶類別標(biāo)識的消息至第一消息中間件服務(wù)器 302 ο步驟402、第一消息中間件服務(wù)器302接收消息發(fā)布服務(wù)器301發(fā)送的攜帶類別標(biāo)識的消息,并將接收的所述消息保存至設(shè)定位置。步驟403、第二消息中間件服務(wù)器303確定該設(shè)定位置存在待發(fā)送消息后,獲取該消息。步驟404、第二消息中間件服務(wù)器303在確定將與獲取的所述消息為同一類別標(biāo)識的所有消息獲取完畢后,按照確定出的對應(yīng)該類別標(biāo)識的各消息在消息發(fā)布服務(wù)器301 側(cè)的發(fā)送順序,將對應(yīng)該類別標(biāo)識的各消息發(fā)送至與該類別標(biāo)識對應(yīng)的消息接收終端。圖4所示流程的步驟401中,消息發(fā)布服務(wù)器301在發(fā)送消息時,需要為該消息中分配類別標(biāo)識并將該類別標(biāo)識攜帶在消息中一起發(fā)送,該類別標(biāo)識的分配原則如下對應(yīng)同一類別標(biāo)識的多個消息對應(yīng)同一業(yè)務(wù)流程以及同一消息接收終端,即為發(fā)往同一消息接收終端并且由一個業(yè)務(wù)流程產(chǎn)生的多個消息分配同一個類別標(biāo)識,該對應(yīng)同一類別標(biāo)識的多個消息在消息發(fā)布服務(wù)器301中按照設(shè)定順序發(fā)送,該設(shè)定順序即各消息在所對應(yīng)的業(yè)務(wù)流程中的產(chǎn)生順序。具體地,消息發(fā)布服務(wù)器301為消息分配的類別標(biāo)識主要用于標(biāo)識各消息是否為需要按照設(shè)定順序發(fā)送的同一組消息,因此,該類別標(biāo)識可以以各種形式存在,例如,可以為一段字符串、所對應(yīng)業(yè)務(wù)流程對應(yīng)的流程代碼(如交易編號)等,本申請?zhí)峁┑膬?yōu)選方式如下根據(jù)該消息所對應(yīng)的消息接收終端的客戶端代碼、該消息所對應(yīng)的業(yè)務(wù)流程的流程代碼進行哈希運算,得到一個哈希值,并將該哈希值作為該消息的類別標(biāo)識。根據(jù)該方式,能夠增加類別標(biāo)識的標(biāo)識空間,避免對應(yīng)不同消息接收終端或業(yè)務(wù)流程的消息占用同一類別標(biāo)識。圖4所示流程的步驟402中,第一消息中間件服務(wù)器302接收消息發(fā)布服務(wù)器301 發(fā)送的攜帶類別標(biāo)識的消息,并將接收的所述消息保存至設(shè)定位置,包括第一消息中間件服務(wù)器302將接收的所述消息保存至本地存儲設(shè)備,即在每個第一消息中間件服務(wù)器302中建立用于存儲消息的存儲文件,第一消息中間件服務(wù)器302在接收到消息發(fā)布服務(wù)器301發(fā)送的消息后,將該消息存儲到建立的該存儲文件。具體地,第一消息中間件服務(wù)器302在接收到消息后,可以根據(jù)該消息攜帶的類別標(biāo)識為索引進行存儲,以便于第二消息中間件服務(wù)器303獲取。或者第一消息中間件服務(wù)器302將接收的所述消息保存至消息存儲服務(wù)器,即設(shè)置專門用于存儲消息的消息存儲服務(wù)器,第一消息中間件服務(wù)器302在接收到消息發(fā)布服務(wù)器 301發(fā)送的消息后,將該消息存儲到該消息存儲服務(wù)器中,以提高消息的安全性。具體地,第一消息中間件服務(wù)器302在接收到消息后,可以根據(jù)該消息攜帶的類別標(biāo)識為索引進行存儲,以便于第二消息中間件服務(wù)器303獲取。或者第一消息中間件服務(wù)器302確定接收的消息對應(yīng)的可靠性要求,在可靠性要求滿足設(shè)定可靠性要求時,將該消息保存至消息存儲服務(wù)器,否則,將該消息保存至本地存儲設(shè)備。以下分別結(jié)合不同的方法實施例,對上述方法實施例中涉及的詳細實現(xiàn)過程進行說明。方法實施例一該方法實施例一提供了一種消息訂閱系統(tǒng)中消息的發(fā)送方法,該方法的具體處理流程與上述系統(tǒng)實施例一所提供的系統(tǒng)對應(yīng)。如圖5所示,基于上述系統(tǒng)實施例一提供的消息訂閱系統(tǒng),該方法實施例一提供的消息發(fā)送方法,主要包括如下步驟步驟501、消息發(fā)布服務(wù)器301發(fā)送消息至第一消息中間件服務(wù)器302,其中,該消息攜帶類別標(biāo)識以及該消息對應(yīng)的發(fā)送順序信息。步驟502、第一消息中間件服務(wù)器302接收消息發(fā)布服務(wù)器301發(fā)送的消息,并將接收的所述消息保存至本地存儲設(shè)備。步驟503、第一消息中間件服務(wù)器302向第二消息中間件服務(wù)器303發(fā)送消息發(fā)送通知,該消息發(fā)送通知中包括該消息的存儲位置信息。步驟504、第二消息中間件服務(wù)器303接收消息發(fā)送通知后,根據(jù)該消息發(fā)送通知中攜帶的消息存儲位置信息,從第一消息中間件服務(wù)器302中獲取該消息。步驟505、第二消息中間件服務(wù)器303判斷當(dāng)前接收的消息是否滿足設(shè)定消息發(fā)送條件,若是,執(zhí)行步驟506,否則繼續(xù)等待。步驟506、根據(jù)該消息攜帶的發(fā)送順序信息,將該消息發(fā)送至消息接收終端。至此,根據(jù)接收的消息對應(yīng)類別標(biāo)識以及發(fā)送順序信息發(fā)送該消息的流程結(jié)束。圖5所示流程的步驟501中,根據(jù)發(fā)送消息的需要,該消息發(fā)布服務(wù)器301發(fā)送的消息中還攜帶消息接收終端的地址等。并且具體地,該消息攜帶類別標(biāo)識以及該消息對應(yīng)的發(fā)送順序信息已在上述系統(tǒng)實施例中詳細描述,此處不再贅述。圖5所示流程的步驟503中,第一消息中間件服務(wù)器302向第二消息中間件服務(wù)器303發(fā)送消息發(fā)送通知,可以優(yōu)選地采用如下方式根據(jù)保存的各第二消息中間件服務(wù)器303與類別標(biāo)識的對應(yīng)關(guān)系,向與接收的該消息攜帶的類別標(biāo)識對應(yīng)的第二消息中間件服務(wù)器303發(fā)送消息發(fā)送通知,該消息發(fā)送通知中包括該消息的存儲位置信息。在實施上述過程之前,需要預(yù)先建立各第二消息中間件服務(wù)器303與類別標(biāo)識的對應(yīng)關(guān)系,該對應(yīng)關(guān)系用于表示每個第二消息中間件服務(wù)器303負(fù)責(zé)處理的消息所對應(yīng)的類別標(biāo)識。在建立該對應(yīng)關(guān)系后,將該對應(yīng)關(guān)系保存在每一個第一消息中間件服務(wù)器302 中,當(dāng)?shù)谝幌⒅虚g件服務(wù)器302接收到消息后,首先獲取該消息的類別標(biāo)識,并根據(jù)保存的對應(yīng)關(guān)系確定該消息攜帶的類別標(biāo)識與哪個第二消息中間件服務(wù)器303對應(yīng),并將該消息的消息發(fā)送通知發(fā)送到確定出的第二消息中間件服務(wù)器303。采用上述處理過程,預(yù)先為每個第二消息中間件服務(wù)器303分配好發(fā)送任務(wù),即為每個第二消息中間件服務(wù)器303分配好需要負(fù)責(zé)發(fā)送的消息對應(yīng)的類別標(biāo)識,根據(jù)該過程,能夠均衡各第二消息中間件服務(wù)器303的負(fù)載,達到消息訂閱系統(tǒng)中各服務(wù)器之間的負(fù)載均衡。圖5所示流程的步驟505中,第二消息中間件服務(wù)器303判斷當(dāng)前接收的消息是否滿足設(shè)定發(fā)送條件,可以通過如下過程方式一保存該消息,在確定將與獲取的該消息為同一類別標(biāo)識的所有消息獲取完畢后, 確定該消息滿足設(shè)定的消息發(fā)送條件。方式二在消息發(fā)送過程中維護一個消息發(fā)送記錄,接收到該消息后,通過查找該消息發(fā)送記錄,在確定發(fā)送順序在該消息的發(fā)送順序之前的消息均已發(fā)送,確定該消息滿足設(shè)定的消息發(fā)送條件。圖5所示流程的步驟506中,根據(jù)該消息攜帶的發(fā)送順序信息,將該消息發(fā)送至消息接收終端,具體可以通過如下過程根據(jù)獲取的當(dāng)前類別標(biāo)識對應(yīng)的各消息中攜帶的發(fā)送順序信息,發(fā)送各消息。具體地,若消息攜帶的發(fā)送順序信息為順序標(biāo)號,則直接根據(jù)該消息的順序標(biāo)號確定消息的發(fā)送順序,并根據(jù)確定的發(fā)送順序發(fā)送該消息。若消息攜帶的發(fā)送順序信息為消息的消息類型信息,例如,對應(yīng)同一業(yè)務(wù)流程的多個消息都有其對應(yīng)的消息類型,并且每個消息類型都有其特定的發(fā)送順序,如在交易業(yè)務(wù)流程中,可能產(chǎn)生多個類別的消息選擇、購買、付款,該三個類型的消息都是按照選擇、購買、付款的順序產(chǎn)生的。因此,第二消息中間件服務(wù)器303確定當(dāng)前接收的消息滿足消息發(fā)送條件后,可以依據(jù)當(dāng)前分類類別對應(yīng)的業(yè)務(wù)流程下所產(chǎn)生的各個消息類型在消息發(fā)布服務(wù)器301側(cè)的發(fā)送順序,也即各消息的生成順序,來確定同一類別標(biāo)識的各消息的發(fā)送順序。具體應(yīng)用中,可以將各業(yè)務(wù)流程下包括的各消息類型信息的發(fā)送順序信息保存在每個第二消息中間件服務(wù)器303中。基于該系統(tǒng)實施例一提供的技術(shù)方案,第一消息中間件服務(wù)器302在接收到消息發(fā)布服務(wù)器301發(fā)送的消息后,將該消息保存在本地存儲設(shè)備,并在保存消息后,及時通知第二消息中間件服務(wù)器303進行處理。該第二消息中間件服務(wù)器303在接收到第一消息中間件服務(wù)器302發(fā)送的消息發(fā)送通知后,獲取該消息,并在該消息滿足消息發(fā)送條件時,發(fā)送該消息,從而保證消息接收終端能夠按照消息在消息發(fā)布服務(wù)器301中的發(fā)送順序接收到各消息。方法實施例二該方法實施例二提供了一種消息訂閱系統(tǒng)中消息的發(fā)送方法,該方法的具體處理流程與上述系統(tǒng)實施例二所提供的系統(tǒng)對應(yīng)。如圖6所示,基于上述系統(tǒng)實施例二提供的消息訂閱系統(tǒng),該方法實施例二提供的消息發(fā)送方法,主要包括如下步驟步驟601、消息發(fā)布服務(wù)器301發(fā)送的消息至第一消息中間件服務(wù)器302,其中,該消息攜帶類別標(biāo)識以及該消息對應(yīng)的發(fā)送順序信息。步驟602、第一消息中間件服務(wù)器302接收消息發(fā)布服務(wù)器301發(fā)送的消息,并將接收的消息保存至消息存儲服務(wù)器。步驟603、第一消息中間件服務(wù)器302向第二消息中間件服務(wù)器303發(fā)送消息發(fā)送通知,該消息發(fā)送通知中包括該消息的存儲位置信息。步驟604、第二消息中間件服務(wù)器303接收消息發(fā)送通知后,根據(jù)該消息發(fā)送通知中攜帶的消息存儲位置信息,從消息存儲服務(wù)器中獲取該消息。步驟605、第二消息中間件服務(wù)器303判斷當(dāng)前接收的消息是否滿足設(shè)定的消息發(fā)送條件,若是,執(zhí)行步驟606,否則繼續(xù)等待。步驟606、根據(jù)消息攜帶的發(fā)送順序信息,將該消息發(fā)送至消息接收終端。至此,根據(jù)接收的消息對應(yīng)類別標(biāo)識的所有消息的發(fā)送流程結(jié)束。圖6所示流程的步驟601中,根據(jù)發(fā)送消息的需要,該消息發(fā)布服務(wù)器301發(fā)送的消息中還攜帶消息接收終端的地址等。并且具體地,該消息攜帶類別標(biāo)識以及該消息對應(yīng)的發(fā)送順序信息已在上述系統(tǒng)實施例中詳細描述,此處不再贅述。圖6所示流程的步驟603的具體執(zhí)行過程與上述方法實施例一中的步驟503的具體執(zhí)行過程基本一致,此處不再贅述。圖6所示流程的步驟605的具體執(zhí)行過程與上述方法實施例一中的步驟505的具體執(zhí)行過程基本一致,此處不再贅述。圖6所示流程的步驟606的具體執(zhí)行過程與上述方法實施例一中的步驟506的具體執(zhí)行過程基本一致,此處不再贅述。本申請方法實施例二還提供了另一種基于上述系統(tǒng)實施例二提供的消息訂閱系統(tǒng)實現(xiàn)的消息發(fā)送流程,如圖7所示,該消息發(fā)送過程,主要包括如下步驟步驟701、消息發(fā)布服務(wù)器301發(fā)送消息至第一消息中間件服務(wù)器302。步驟702、第一消息中間件服務(wù)器302接收消息發(fā)布服務(wù)器301發(fā)送的消息,并將接收的所述消息保存至消息存儲服務(wù)器。步驟703、第二消息中間件服務(wù)器303周期性輪詢消息存儲服務(wù)器,判斷該消息存儲服務(wù)器中是否保存有需要當(dāng)前發(fā)送消息,若是,執(zhí)行步驟704至步驟706,若否,等待下一輪詢周期。步驟704、第二消息中間件服務(wù)器303從消息存儲服務(wù)器中獲取該消息。步驟705、第二消息中間件服務(wù)器303判斷當(dāng)前接收的消息是否滿足設(shè)定的消息發(fā)送條件,若是,執(zhí)行步驟706,否則繼續(xù)等待。步驟706、根據(jù)該消息攜帶的發(fā)送順序信息,將該消息發(fā)送至消息接收終端。至此,根據(jù)接收的消息對應(yīng)類別標(biāo)識的所有消息的發(fā)送流程結(jié)束。圖7所示流程的步驟701、步驟702以及步驟704至步驟706的具體執(zhí)行過程分別與上述流程的步驟601、步驟602以及步驟604至步驟606的具體執(zhí)行過程基本一致,此處不再贅述。圖7所示流程的步驟703中,第二消息中間件服務(wù)器303周期性輪詢消息存儲服務(wù)器,判斷該消息存儲服務(wù)器中是否保存有需要當(dāng)前發(fā)送的消息的過程已在上述系統(tǒng)實施例中詳細描述,此處不再贅述。根據(jù)本申請方法實施例二提供的技術(shù)方案,第一消息中間件服務(wù)器302在接收到消息發(fā)布服務(wù)器301發(fā)送的消息后,將該消息保存在消息存儲服務(wù)器中,以方便對消息的統(tǒng)一管理與獲取。該第一消息中間件服務(wù)器302可以選擇向第二消息中間件服務(wù)器303發(fā)送消息發(fā)送通知,以保證消息發(fā)送的及時性,也可以不發(fā)送消息發(fā)送通知,以減少第一消息中間件服務(wù)器302和第二消息中間件服務(wù)器303之間的信令開銷。該第二消息中間件服務(wù)器303可以在接收到第一消息中間件服務(wù)器302發(fā)送的消息發(fā)送通知后獲取該消息,或者通過周期性輪詢消息存儲服務(wù)器確定該消息存儲服務(wù)器中保存有需要當(dāng)前發(fā)送的消息時獲取該消息,并在該消息滿足設(shè)定的消息發(fā)送條件時發(fā)送該消息,從而保證消息接收終端能夠按照消息在消息發(fā)布服務(wù)器301中的發(fā)送順序接收到各消息。方法實施例三該方法實施例三提供了一種消息訂閱系統(tǒng)中消息的發(fā)送方法,該方法的具體處理流程與上述系統(tǒng)實施例三所提供的系統(tǒng)對應(yīng)。如圖8所示,基于上述系統(tǒng)實施例三提供的消息訂閱系統(tǒng),該方法實施例三提供的消息發(fā)送方法,主要包括如下步驟步驟801、消息發(fā)布服務(wù)器301發(fā)送消息至第一消息中間件服務(wù)器302,其中,該消息攜帶類別標(biāo)識以及該消息對應(yīng)的發(fā)送順序信息。步驟802、第一消息中間件服務(wù)器302接收消息發(fā)布服務(wù)器301發(fā)送的消息,確定該消息的存儲位置。步驟803、第一消息中間件服務(wù)器302將該消息保存在確定出的存儲位置(本地存儲設(shè)備或消息存儲數(shù)據(jù)庫)。步驟804、第一消息中間件服務(wù)器302向第二消息中間件服務(wù)器303發(fā)送消息發(fā)送通知,該消息發(fā)送通知中包括該消息的存儲位置信息。步驟805、第二消息中間件服務(wù)器303接收消息發(fā)送通知后,根據(jù)該消息發(fā)送通知中攜帶的消息存儲位置信息,從對應(yīng)的消息存儲位置中獲取該消息。步驟806、第二消息中間件服務(wù)器303判斷當(dāng)前接收的消息是否滿足設(shè)定的消息發(fā)送條件,若是,執(zhí)行步驟807,否則繼續(xù)等待。步驟807、根據(jù)該消息攜帶的發(fā)送順序信息,將該消息發(fā)送至消息接收終端。圖8所示流程的步驟804至步驟807的具體執(zhí)行過程分別與上述方法實施例一中的步驟503至步驟506的具體執(zhí)行過程基本一致,此處不再贅述。圖8所示流程的步驟803中,第一消息中間件服務(wù)器302確定該消息的存儲位置, 可以優(yōu)選地通過如下方式第一消息中間件服務(wù)器302確定接收的消息對應(yīng)的可靠性要求,在可靠性要求滿足設(shè)定可靠性要求時,將該消息保存至消息存儲服務(wù)器,否則,將該消息保存至本地存儲設(shè)備。具體地,每個業(yè)務(wù)流程對消息的可靠性都有不同的要求,在接收到消息后,可以根據(jù)消息的類別標(biāo)識確定所在的業(yè)務(wù)流程對于消息可靠性的要求級別,并將可靠性要求滿足設(shè)定可靠性要求的消息發(fā)送至消息存儲服務(wù)器。一個優(yōu)選實施方式中,為提高處理速度,可以預(yù)先建立對可靠性要求高的消息的類別標(biāo)識列表,當(dāng)接收的消息攜帶的類別標(biāo)識在此列表中時,則確定該消息需要發(fā)送至消息存儲服務(wù)器?;谠摲椒▽嵤├峁┑募夹g(shù)方案,在達到上述方法實施例一所述的技術(shù)效果的基礎(chǔ)之上,由于該實施例中第一消息中間件服務(wù)器302在接收到消息后,能夠進一步針對該消息要求的可靠性,靈活選擇消息的存儲位置。在消息可靠性要求較高時,可以選擇將該消息保存至專門用于存儲消息的消息存儲服務(wù)器,以提高消息的安全性;在消息可靠性要求較低時,可以選擇將該消息保存在本地存儲設(shè)備,在減少保存消息所耗費的網(wǎng)絡(luò)資源的同時,提高保存消息的效率。通過本申請實施例提供的上述至少一個技術(shù)方案,第一消息中間件服務(wù)器302接收消息發(fā)布服務(wù)器301發(fā)送的攜帶類別標(biāo)識以及發(fā)送順序的消息,并將接收的消息保存至設(shè)定位置;其中,對應(yīng)同一類別標(biāo)識的多個消息對應(yīng)同一業(yè)務(wù)流程以及同一消息接收終端, 并且在消息發(fā)布服務(wù)器301中按照對應(yīng)的發(fā)送順序發(fā)送;第二消息中間件服務(wù)器303確定該設(shè)定位置存在需要當(dāng)前發(fā)送消息后,獲取該消息,并在確定該消息滿足設(shè)定的發(fā)送條件后,按照該消息攜帶的發(fā)送順序信息,將該消息發(fā)送至與該類別標(biāo)識對應(yīng)的消息接收終端。 根據(jù)該技術(shù)方案,消息發(fā)布服務(wù)器301在發(fā)送消息時根據(jù)該消息對應(yīng)的業(yè)務(wù)流程以及消息接收終端為該消息分配類別標(biāo)識,第一消息中間件服務(wù)器302在接收到消息后保存,由第二消息中間件服務(wù)器303在確定該消息滿足設(shè)定的消息發(fā)送條件后,發(fā)送該消息。從而使得消息接收終端能夠按照消息發(fā)布服務(wù)器301發(fā)送該類別標(biāo)識對應(yīng)的各消息的順序,接收到對應(yīng)同一業(yè)務(wù)流程的各個消息。本申請是參照根據(jù)本申請實施例的方法、設(shè)備(系統(tǒng))、和計算機程序產(chǎn)品的流程圖和/或方框圖來描述的。應(yīng)理解可由計算機程序指令實現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻@些計算機程序指令到通用計算機、專用計算機、嵌入式處理機或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個機器,使得通過計算機或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。這些計算機程序指令也可存儲在能引導(dǎo)計算機或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計算機可讀存儲器中,使得存儲在該計算機可讀存儲器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。這些計算機程序指令也可裝載到計算機或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計算機或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計算機實現(xiàn)的處理,從而在計算機或其他可編程設(shè)備上執(zhí)行的指令提供用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。顯然,本領(lǐng)域的技術(shù)人員可以對本申請進行各種改動和變型而不脫離本申請的精神和范圍。這樣,倘若本申請的這些修改和變型屬于本申請權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本申請也意圖包含這些改動和變型在內(nèi)。
權(quán)利要求
1.一種消息發(fā)送方法,其特征在于,包括第一消息中間件服務(wù)器接收消息發(fā)布服務(wù)器發(fā)送的攜帶類別標(biāo)識以及對應(yīng)的消息發(fā)送順序信息的消息,并將接收的所述消息保存至設(shè)定位置;其中,對應(yīng)同一類別標(biāo)識的多個消息對應(yīng)同一業(yè)務(wù)流程以及同一消息接收終端,并且在所述消息發(fā)布服務(wù)器中按照對應(yīng)的消息發(fā)送順序信息發(fā)送;第二消息中間件服務(wù)器確定所述設(shè)定位置存在需要當(dāng)前發(fā)送的消息后,獲取所述消息,并在確定所述消息滿足設(shè)定的消息發(fā)送條件后,按照所述消息攜帶的發(fā)送順序信息,將所述消息發(fā)送至與所述類別標(biāo)識對應(yīng)的消息接收終端。
2.如權(quán)利要求1所述的方法,其特征在于,第一消息中間件服務(wù)器將接收的所述消息保存至設(shè)定位置,包括第一消息中間件服務(wù)器將接收的所述消息保存至本地存儲設(shè)備;或第一消息中間件服務(wù)器將接收的所述消息保存至消息存儲服務(wù)器;或第一消息中間件服務(wù)器確定接收的所述消息對應(yīng)的可靠性要求,在可靠性要求高于設(shè)定要求時,將所述消息保存至消息存儲服務(wù)器,否則,將所述消息保存至本地存儲設(shè)備。
3.如權(quán)利要求1所述的方法,其特征在于,所述第一消息中間件服務(wù)器將接收的所述消息保存至設(shè)定位置后,還包括根據(jù)保存的各第二消息中間件服務(wù)器與類別標(biāo)識的對應(yīng)關(guān)系,向與接收的所述消息攜帶的類別標(biāo)識對應(yīng)的第二消息中間件服務(wù)器發(fā)送消息發(fā)送通知,所述消息發(fā)送通知中包括所述消息的存儲位置信息。
4.如權(quán)利要求3所述的方法,其特征在于,第二消息中間件服務(wù)器確定有需要當(dāng)前發(fā)送的消息,以及獲取所述消息,包括在接收到所述第一消息中間件服務(wù)器發(fā)送的消息發(fā)送通知后,確定有需要當(dāng)前發(fā)送的消息;根據(jù)所述消息發(fā)送通知中包括的存儲位置信息,獲取所述消息。
5.如權(quán)利要求2所述的方法,其特征在于,若所述第一消息中間件服務(wù)器保存接收的所有消息的位置為所述消息存儲服務(wù)器,則所述第二消息中間件服務(wù)器確定有需要當(dāng)前發(fā)送的消息,包括第二消息中間件服務(wù)器周期性輪詢所述消息存儲服務(wù)器,若根據(jù)所述消息存儲服務(wù)器保存的消息發(fā)送記錄,確定所述消息存儲服務(wù)器中保存有未被發(fā)送的類別標(biāo)識對應(yīng)的消息或與自身標(biāo)識對應(yīng)的類別標(biāo)識所對應(yīng)的消息,則確定有需要當(dāng)前發(fā)送的消息;其中,所述消息發(fā)送記錄中包括已被發(fā)送的消息的類別標(biāo)識與獲取該消息的第二消息中間件服務(wù)器的標(biāo)識的對應(yīng)關(guān)系;或第二消息中間件服務(wù)器周期性輪詢所述消息存儲服務(wù)器,若所述消息存儲服務(wù)器保存的消息攜帶的類別標(biāo)識屬于預(yù)先為所述第二消息中間件服務(wù)器分配的類別標(biāo)識中,則確定有需要當(dāng)前發(fā)送的消息。
6.如權(quán)利要求5所述的方法,其特征在于,所述類別標(biāo)識為通過哈希算法確定的數(shù)值。
7.如權(quán)利要求1所述的方法,其特征在于,確定所述消息滿足設(shè)定的消息發(fā)送條件的方式,包括在確定將與獲取的所述消息為同一類別標(biāo)識的所有消息獲取完畢后,確定所述消息滿足設(shè)定的消息發(fā)送條件;或根據(jù)保存的消息發(fā)送記錄,確定發(fā)送順序在獲取的所述消息的發(fā)送順序之前的消息發(fā)送完畢,確定所述消息滿足設(shè)定的消息發(fā)送條件。
8.一種消息訂閱系統(tǒng),其特征在于,包括消息發(fā)布服務(wù)器,用于為對應(yīng)同一業(yè)務(wù)流程以及同一消息接收終端的多個消息分配同一類別標(biāo)識,并將分配的所述類別標(biāo)識以及該消息對應(yīng)的消息發(fā)送順序信息攜帶在所述消息中按照對應(yīng)的消息發(fā)送順序發(fā)送;第一消息中間件服務(wù)器,用于接收所述消息發(fā)布服務(wù)器發(fā)送的攜帶類別標(biāo)識以及對應(yīng)的消息發(fā)送順序信息的消息,并將接收的所述消息保存至設(shè)定位置;第二消息中間件服務(wù)器,用于在確定所述設(shè)定位置存在需要當(dāng)前發(fā)送的消息后,獲取所述消息,并在確定所述消息滿足設(shè)定的消息發(fā)送條件后,按照所述消息攜帶的發(fā)送順序信息,將所述消息發(fā)送至與所述類別標(biāo)識對應(yīng)的消息接收終端。
9.如權(quán)利要求8所述的系統(tǒng),其特征在于,第一消息中間件服務(wù)器,具體用于 將接收的所述消息保存至本地存儲設(shè)備;或?qū)⒔邮盏乃鱿⒈4嬷料⒋鎯Ψ?wù)器;或確定接收的所述消息對應(yīng)的可靠性要求,在可靠性要求高于設(shè)定要求時,將所述消息保存至消息存儲服務(wù)器,否則,將所述消息保存至本地存儲設(shè)備。
10.如權(quán)利要求8所述的系統(tǒng),其特征在于,所述第一消息中間件服務(wù)器,還用于在將接收的所述消息保存至設(shè)定位置后,根據(jù)保存的各第二消息中間件服務(wù)器與類別標(biāo)識的對應(yīng)關(guān)系,向與接收的所述消息攜帶的類別標(biāo)識對應(yīng)的第二消息中間件服務(wù)器發(fā)送消息發(fā)送通知,所述消息發(fā)送通知中包括所述消息的存儲位置信息。
11.如權(quán)利要求10所述的系統(tǒng),其特征在于,所述第二消息中間件服務(wù)器,具體用于 在接收到所述第一消息中間件服務(wù)器發(fā)送的消息發(fā)送通知后,確定有需要當(dāng)前發(fā)送的消息,并根據(jù)所述消息發(fā)送通知中包括的存儲位置信息,獲取所述消息。
12.如權(quán)利要求9所述的系統(tǒng),其特征在于,所述第二消息中間件服務(wù)器,具體用于 在所述第一消息中間件服務(wù)器保存接收的所有消息的位置為所述消息存儲服務(wù)器時,周期性輪詢所述消息存儲服務(wù)器,若根據(jù)所述消息存儲服務(wù)器保存的消息發(fā)送記錄,確定所述消息存儲服務(wù)器中保存有未被發(fā)送的類別標(biāo)識對應(yīng)的消息或與自身標(biāo)識對應(yīng)的類別標(biāo)識所對應(yīng)的消息,則確定有需要當(dāng)前發(fā)送的消息;其中,所述消息發(fā)送記錄中包括已被發(fā)送的消息的類別標(biāo)識與獲取該消息的第二消息中間件服務(wù)器的標(biāo)識的對應(yīng)關(guān)系;或在所述第一消息中間件服務(wù)器保存接收的所有消息的位置為所述消息存儲服務(wù)器時, 周期性輪詢所述消息存儲服務(wù)器,若所述消息存儲服務(wù)器保存的消息攜帶的類別標(biāo)識屬于預(yù)先為所述第二消息中間件服務(wù)器分配的類別標(biāo)識中,則確定有需要當(dāng)前發(fā)送的消息。
13.如權(quán)利8所述的系統(tǒng),其特征在于,所述第二消息中間件服務(wù)器,具體用于在確定將與獲取的所述消息為同一類別標(biāo)識的所有消息獲取完畢后,確定所述消息滿足設(shè)定的消息發(fā)送條件;或根據(jù)保存的消息發(fā)送記錄,確定發(fā)送順序在獲取的所述消息的發(fā)送順序之前的消息發(fā)送完畢,確定所述消息滿足設(shè)定的消息發(fā)送條件。
全文摘要
本申請公開了一種消息訂閱系統(tǒng)以及消息發(fā)送方法,主要技術(shù)方案包括第一消息中間件服務(wù)器接收消息發(fā)布服務(wù)器發(fā)送的攜帶類別標(biāo)識以及對應(yīng)的消息發(fā)送順序信息的消息,將接收的消息保存至設(shè)定位置;其中,對應(yīng)同一類別標(biāo)識的多個消息對應(yīng)同一業(yè)務(wù)流程以及同一消息接收終端,并且在消息發(fā)布服務(wù)器中按照對應(yīng)的發(fā)送順序發(fā)送;第二消息中間件服務(wù)器確定設(shè)定位置存在需要當(dāng)前發(fā)送的消息后,獲取消息,并在確定該消息滿足設(shè)定的發(fā)送條件后,按照該消息的發(fā)送順序,將該消息發(fā)送至與類別標(biāo)識對應(yīng)的消息接收終端。根據(jù)該技術(shù)方案,消息接收終端能夠按照消息發(fā)布服務(wù)器發(fā)送該類別標(biāo)識對應(yīng)的各消息的順序接收到消息。
文檔編號H04L12/58GK102469033SQ20101053256
公開日2012年5月23日 申請日期2010年11月1日 優(yōu)先權(quán)日2010年11月1日
發(fā)明者曾憲杰 申請人:阿里巴巴集團控股有限公司