一種訂閱和發(fā)布主題消息的方法
【專利摘要】本申請公開了訂閱和發(fā)布主題消息的方法,通過計(jì)算消息中間件中訂閱主題的哈希值來確定具體的消息中間件的服務(wù)端,并且在消息中間件的客戶端訂閱一個(gè)主題時(shí),為其配置兩個(gè)服務(wù)端。采用本發(fā)明,使得能夠訂閱的消息數(shù)量可以橫向的無限擴(kuò)展,同時(shí)還可以防止某一類主題消息的單點(diǎn)故障,提高消息中間件的可靠性。
【專利說明】一種訂閱和發(fā)布主題消息的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及分布式系統(tǒng)技術(shù),特別是涉及一種分布式系統(tǒng)中訂閱和發(fā)布主題消息的方法。
【背景技術(shù)】
[0002]在分布式系統(tǒng)中,客戶端與服務(wù)器端之間交互的信息是通過消息中間件進(jìn)行轉(zhuǎn)發(fā)的。
[0003]當(dāng)消息中間件的客戶端需要訂閱一個(gè)主題時(shí),客戶端將隨機(jī)選擇一個(gè)中間件的服務(wù)端與其建立連接,并將訂閱主題的消息發(fā)送給所選擇的服務(wù)端。該服務(wù)端收到訂閱主題的消息后,會(huì)把這條訂閱信息發(fā)布給其他消息中間件服務(wù)端,以實(shí)現(xiàn)訂閱信息在各服務(wù)端的同步。為了保證各個(gè)消息中間件服務(wù)端訂閱主題的一致性和完整性,在同步訂閱信息的時(shí)候需要對(duì)每一個(gè)消息中間件服務(wù)端加分布式鎖,保證同步訂閱主題全部成功以后才返回給客戶端訂閱成功。
[0004]當(dāng)消息中間件的客戶端需要發(fā)布一個(gè)主題的消息時(shí),系統(tǒng)將為其任意選擇一個(gè)消息中間件的服務(wù)端進(jìn)行該主題的消息發(fā)布,然后再由所選擇的服務(wù)端將主題同步到其他服務(wù)端。在進(jìn)行主題發(fā)布時(shí),消息中間件的客戶端通常使用域名或者vip訪問消息中間件的服務(wù)端,這樣,就可以確保所選擇進(jìn)行發(fā)布主題的服務(wù)端的有效性,從而可以避免由于進(jìn)行主題發(fā)布的服務(wù)端的不可用性而導(dǎo)致的主題發(fā)布失敗情況的發(fā)生(即發(fā)生單點(diǎn)問題)。
[0005]上述傳統(tǒng)的訂閱和發(fā)布主題的方法,利用分布式通信和分布式鎖實(shí)現(xiàn)多個(gè)消息中間件實(shí)例(即服務(wù)端)對(duì)等,從而達(dá)到橫向擴(kuò)展(即擴(kuò)展提供服務(wù)的服務(wù)端數(shù)量,以增強(qiáng)系統(tǒng)的可靠性)以及防止單點(diǎn)的目的。但是隨著服務(wù)端數(shù)量增多,就會(huì)導(dǎo)致利用分布式鎖進(jìn)行鎖定服務(wù)端的時(shí)延增加,從而會(huì)使得不可控的場景增多,保證數(shù)據(jù)一致性的復(fù)雜度也是線性增長,進(jìn)而影響系統(tǒng)的整體性能。由此可見,傳統(tǒng)訂閱和發(fā)布主題的方法受限于服務(wù)端的規(guī)模,不能實(shí)現(xiàn)橫向擴(kuò)展。
【發(fā)明內(nèi)容】
[0006]有鑒于此,本發(fā)明的主要目的在于提供一種訂閱和發(fā)布主題消息的方法,該方法可以在應(yīng)用實(shí)例的規(guī)模較大時(shí)實(shí)現(xiàn)橫向擴(kuò)展、提高系統(tǒng)性能。
[0007]為了達(dá)到上述目的,本發(fā)明提出的技術(shù)方案為:
[0008]一種訂閱和發(fā)布主題消息的方法,包括:
[0009]為系統(tǒng)中的每個(gè)消息中間件配置服務(wù)器作為該消息中間件的服務(wù)端,并為每個(gè)所述服務(wù)端配置一個(gè)哈希區(qū)間,其中,不同服務(wù)端所配置的哈希區(qū)間不相同;
[0010]當(dāng)消息中間件的客戶端訂閱一個(gè)主題時(shí),請求其所屬消息中間件的服務(wù)端確定用于接收訂閱所述主題的消息的服務(wù)端,其所屬消息中間件的服務(wù)端根據(jù)所述主題的內(nèi)容按照預(yù)設(shè)的哈希算法計(jì)算出相應(yīng)的哈希值,將該哈希值所在的所述哈希區(qū)間對(duì)應(yīng)的服務(wù)端Fl以及與所述服務(wù)端Fl的IP地址相鄰的下一個(gè)服務(wù)端F2,作為用于接收訂閱所述主題的消息的服務(wù)端并通知給所述客戶端;所述客戶端根據(jù)該通知將訂閱所述主題的消息發(fā)送給所述服務(wù)端Fl和所述服務(wù)端F2 ;
[0011]當(dāng)消息中間件的客戶端發(fā)布一個(gè)主題的消息時(shí),請求任意一個(gè)中間件的服務(wù)端確定用于發(fā)布所述主題的消息的服務(wù)端,接收到所述請求的服務(wù)端根據(jù)所要發(fā)布的主題的內(nèi)容,按照所述哈希算法計(jì)算出相應(yīng)的哈希值,將該哈希值所在的所述哈希區(qū)間對(duì)應(yīng)的服務(wù)端F3作為用于發(fā)布所述主題的消息的服務(wù)端,并通知給所述客戶端;所述客戶端根據(jù)該通知將需要發(fā)布的所述主題的消息發(fā)送給所述服務(wù)端F3。
[0012]綜上所述,本發(fā)明提出的訂閱和發(fā)布主題消息的方法,通過計(jì)算消息中間件中訂閱主題的哈希值,來確定具體的消息中間件的服務(wù)端,使得能夠訂閱的消息數(shù)量可以橫向的無限擴(kuò)展,并且在消息中間件的客戶端訂閱一個(gè)主題時(shí),為其配置兩個(gè)服務(wù)端,如此,可以防止某一類主題消息的單點(diǎn)故障,從而可以提高消息中間件的可靠性。
【專利附圖】
【附圖說明】
[0013]圖1為本發(fā)明實(shí)施例一的流程示意圖。
【具體實(shí)施方式】
[0014]為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖及具體實(shí)施例對(duì)本發(fā)明作進(jìn)一步地詳細(xì)描述。
[0015]本發(fā)明的核心思想是:通過計(jì)算消息中間件中訂閱主題的哈希值來確定具體的消息中間件的服務(wù)端,可以使能夠訂閱的消息數(shù)量橫向的無限擴(kuò)展,并且在消息中間件的客戶端訂閱一個(gè)主題時(shí),為 其配置兩個(gè)服務(wù)端,如此,可以防止某一類主題消息的單點(diǎn)故障,從而可以提高消息中間件的可靠性。
[0016]圖1為本發(fā)明實(shí)施例一的流程示意圖,如圖1所示,該實(shí)施例主要包括:
[0017]步驟101、為系統(tǒng)中的每個(gè)消息中間件配置服務(wù)器作為該消息中間件的服務(wù)端,并為每個(gè)所述服務(wù)端配置一個(gè)哈希區(qū)間,其中,不同服務(wù)端所配置的哈希區(qū)間不相同。
[0018]較佳地,可以采用下述方法為每個(gè)所述服務(wù)端配置一個(gè)哈希區(qū)間:
[0019]對(duì)于第m個(gè)服務(wù)端,將其哈希區(qū)間配置為,其中,
【權(quán)利要求】
1.一種訂閱和發(fā)布主題消息的方法,其特征在于,包括: 為系統(tǒng)中的每個(gè)消息中間件配置服務(wù)器作為該消息中間件的服務(wù)端,并為每個(gè)所述服務(wù)端配置一個(gè)哈希區(qū)間,其中,不同服務(wù)端所配置的哈希區(qū)間不相同; 當(dāng)消息中間件的客戶端訂閱一個(gè)主題時(shí),請求其所屬消息中間件的服務(wù)端確定用于接收訂閱所述主題的消息的服務(wù)端,其所屬消息中間件的服務(wù)端根據(jù)所述主題的內(nèi)容按照預(yù)設(shè)的哈希算法計(jì)算出相應(yīng)的哈希值,將該哈希值所在的所述哈希區(qū)間對(duì)應(yīng)的服務(wù)端Fl以及與所述服務(wù)端Fl的IP地址相鄰的下一個(gè)服務(wù)端F2,作為用于接收訂閱所述主題的消息的服務(wù)端并通知給所述客戶端;所述客戶端根據(jù)該通知將訂閱所述主題的消息發(fā)送給所述服務(wù)端Fl和所述服務(wù)端F2 ; 當(dāng)消息中間件的客戶端發(fā)布一個(gè)主題的消息時(shí),請求任意一個(gè)中間件的服務(wù)端確定用于發(fā)布所述主題的消息的服務(wù)端,接收到所述請求的服務(wù)端根據(jù)所要發(fā)布的主題的內(nèi)容,按照所述哈希算法計(jì)算出相應(yīng)的哈希值,將該哈希值所在的所述哈希區(qū)間對(duì)應(yīng)的服務(wù)端F3作為用于發(fā)布所述主題的消息的服務(wù)端,并通知給所述客戶端;所述客戶端根據(jù)該通知將需要發(fā)布的所述主題的消息發(fā)送給所述服務(wù)端F3。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述為每個(gè)所述服務(wù)端配置一個(gè)哈希區(qū)間包括: 對(duì)于每個(gè)服務(wù)端,將其哈希區(qū)間配置為
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述請求任意一個(gè)中間件的服務(wù)端包括: 所述客戶端通過域名或者ViP的方式訪問所有的消息中間件的服務(wù)端。
4.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述方法進(jìn)一步包括: 客戶端在每個(gè)預(yù)設(shè)的檢查周期,檢查當(dāng)前用于訂閱主題和發(fā)布主題消息的每個(gè)服務(wù)端是否可用,如果檢查到所述檢查周期內(nèi)一個(gè)服務(wù)端不可用的次數(shù)達(dá)到預(yù)設(shè)的門限值W,則重新請求確定相應(yīng)的用于發(fā)布主題消息或訂閱主題的服務(wù)端。
5.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述方法進(jìn)一步包括: 客戶端在每個(gè)預(yù)設(shè)的檢查周期,對(duì)于當(dāng)前所訂閱和發(fā)布消息的每個(gè)主題,重新請求用于相應(yīng)的主題訂閱或主題消息發(fā)布的服務(wù)端,并且將所請求的服務(wù)端與本地當(dāng)前保存的相應(yīng)服務(wù)端進(jìn)行比較,如果不同,則將本地保存的用于相應(yīng)的主題訂閱或主題消息發(fā)布的服務(wù)端設(shè)置為所請求的服務(wù)端。
【文檔編號(hào)】H04L29/08GK103841206SQ201410098109
【公開日】2014年6月4日 申請日期:2014年3月17日 優(yōu)先權(quán)日:2014年3月17日
【發(fā)明者】吳友強(qiáng) 申請人:北京京東尚科信息技術(shù)有限公司