一種擴(kuò)展消息中間件吞吐量的方法及系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及通信技術(shù)領(lǐng)域,尤其涉及一種擴(kuò)展消息中間件吞吐量的方法及系統(tǒng)。
【背景技術(shù)】
[0002]隨著云計算、分布式技術(shù)的發(fā)展,消息中間件的使用也越來越多。消息中間件(message oriented middleware)是指支持與保障分布式應(yīng)用程序之間收發(fā)消息的中間件,常見的產(chǎn)品有RabbitMQ、ActiveMQ等。分布式應(yīng)用程序之間的通信接口由消息中間件提供,消息發(fā)送方和接收方之間的連接完全是松耦合的,通信是非阻塞的。消息中間件已廣泛應(yīng)用于各類分布式應(yīng)用系統(tǒng)中。現(xiàn)有技術(shù)對消息中間件的使用,一條隊列傳輸同種業(yè)務(wù)類型的消息,多種業(yè)務(wù)類型的消息需要通過多條隊列進(jìn)行傳輸,主要有以下兩個常見問題:單條隊列傳輸消息的速度受計算機(jī)硬件、網(wǎng)絡(luò)等條件限制,難以滿足業(yè)務(wù)的速度要求;單位時間內(nèi),消息中間件的單條隊列處理消息的總量有限,隨著消息總量增加,傳輸速度呈現(xiàn)非線性下降,甚至達(dá)到零值,不適合在業(yè)務(wù)處理量大的系統(tǒng)中使用。但是現(xiàn)有的專利仍然無法解決以上兩個常見的問題,如:
[0003]在2011年11月23日公開的公開號為102255794A的中國發(fā)明,涉及一種遠(yuǎn)程消息收發(fā)吞吐量優(yōu)化和等待時間縮短用系統(tǒng)和方法,該系統(tǒng)用于運行于遠(yuǎn)程節(jié)點上的進(jìn)程間的進(jìn)程間通信中的消息收發(fā),包括:可通信地彼此耦連的至少兩個主節(jié)點;可通信地與至少一個主節(jié)點耦連的至少一個訂閱方/發(fā)布方節(jié)點;適于存儲進(jìn)程間消息的存儲器;可由多個進(jìn)程并行訪問的共享內(nèi)存中的至少一個存儲緩沖區(qū)隊列;插入進(jìn)程間消息的寫進(jìn)程和異步地發(fā)送消息的遠(yuǎn)程發(fā)送進(jìn)程,和同步地接收來自/到達(dá)隊列的消息的遠(yuǎn)程接收進(jìn)程;將至少一個進(jìn)程間消息插入到遠(yuǎn)程接收節(jié)點存儲的隊列中;至少一個讀進(jìn)程,它使消息從遠(yuǎn)程接收節(jié)點上的隊列中出列;適于指向隊列中的空閑存儲緩沖區(qū)的空閑指向元件;和適于指向包含進(jìn)程間消息的存儲緩沖區(qū)的數(shù)據(jù)指向元件。
[0004]在2013年12月18日公開的公開號為103457875A的中國發(fā)明,公開了車聯(lián)網(wǎng)中基于多優(yōu)先級的消息隊列控制方法,該方法在車輛產(chǎn)生消息時,針對每個消息劃分成不同優(yōu)先級;再據(jù)消息的優(yōu)選級,將消息放入不同的控制隊列;在消息傳輸時,根據(jù)控制隊列的發(fā)送優(yōu)先等級發(fā)送對應(yīng)隊列中的消息。該發(fā)明提供的消息隊列控制方法具有可靠的通信服務(wù)、根據(jù)不同業(yè)務(wù)類型Qos需求提供不同時延、吞吐量、可靠性等性能保障。
[0005]在2014年3月12日公開的公開號為103631665A的中國發(fā)明,提供了一種基于消息隊列的線程間通信的方法和系統(tǒng),采用所述消息隊列執(zhí)行多線程進(jìn)隊push以及單線程出隊pop的操作,其中,所述多線程進(jìn)隊push的操作包括:判斷所述消息隊列是否已滿;若否,則分別計算η個線程進(jìn)隊push的偏移量;所述η為大于或等于I的正整數(shù);依據(jù)所述η個線程進(jìn)隊push的偏移量,分別計算所述η個線程進(jìn)隊push的實際位置Pos ;所述η個線程分別在其進(jìn)隊push的實際位置Pos執(zhí)行進(jìn)隊push操作。該發(fā)明保證了多線程訪問操作不碰撞,解決了線程間通信時阻塞的問題,減少了資源消耗,充分利用了系統(tǒng)資源,提高了處理速度,從而提高了服務(wù)器吞吐量。
【發(fā)明內(nèi)容】
[0006]本發(fā)明要解決的技術(shù)問題之一,在于提供一種擴(kuò)展消息中間件吞吐量的方法,一般用于接收消息的客戶端都有訂閱消息中間件中的多條隊列的能力,但大多數(shù)情況是所訂閱的多條隊列不具有業(yè)務(wù)相關(guān)性;本發(fā)明能訂閱多條業(yè)務(wù)相關(guān)的隊列,使多條消息能夠傳輸同種業(yè)務(wù)消息;可以把有業(yè)務(wù)先后順序要求的消息路由到同一條隊列,使消息按照先進(jìn)先出的順序在隊列中傳輸,消息的業(yè)務(wù)先后順序也不會被打亂,保證了部分消息之間的順序性。
[0007]本發(fā)明要解決的問題之一,是這樣實現(xiàn)的:
[0008]—種擴(kuò)展消息中間件吞吐量的方法,包括如下步驟:
[0009]步驟1、根據(jù)當(dāng)前發(fā)送的具有同種業(yè)務(wù)類型的消息體總吞吐量及消息中間件中單條隊列的吞吐量決定隊列設(shè)置復(fù)數(shù)條隊列,并將該復(fù)數(shù)條隊列進(jìn)行編號,且每個消息體均包括復(fù)數(shù)個不同名稱的業(yè)務(wù)字段;
[0010]步驟2、初次配置映射關(guān)系時,選取任意一個消息體中的任意一個業(yè)務(wù)字段作為該消息體的目標(biāo)字段,建立目標(biāo)字段與隊列編號之間的映射關(guān)系F(X) = Y,其中:X為該目標(biāo)字段的值,Y為隊列編號;
[0011]步驟3、根據(jù)上述目標(biāo)字段的名稱從每個消息體中獲取業(yè)務(wù)字段,并將該業(yè)務(wù)字段作為每個消息體的目標(biāo)字段,分別將每個目標(biāo)字段的值X代入所述映射關(guān)系F (X) = Y,運算出每個消息體對應(yīng)的隊列編號Y,并將每個消息體分別發(fā)送到對應(yīng)的隊列中。
[0012]進(jìn)一步地,所述映射關(guān)系是通過一致性哈希算法或取模運算建立的。
[0013]本發(fā)明要解決的技術(shù)問題之二,在于提供一種擴(kuò)展消息中間件吞吐量的系統(tǒng),一般用于接收消息的客戶端都有訂閱消息中間件中的多條隊列的能力,但大多數(shù)情況是所訂閱的多條隊列不具有業(yè)務(wù)相關(guān)性;本發(fā)明能訂閱多條業(yè)務(wù)相關(guān)的隊列,使多條消息能夠傳輸同種業(yè)務(wù)消息;可以把有業(yè)務(wù)先后順序要求的消息路由到同一條隊列,使消息按照先進(jìn)先出的順序在隊列中傳輸,消息的業(yè)務(wù)先后順序也不會被打亂,保證了部分消息之間的順序性。
[0014]本發(fā)明要解決的問題之二,是這樣實現(xiàn)的:
[0015]—種擴(kuò)展消息中間件吞吐量的系統(tǒng),包括:
[0016]隊列編號模塊,用于根據(jù)當(dāng)前發(fā)送的具有同種業(yè)務(wù)類型的消息體總吞吐量及消息中間件中單條隊列的吞吐量設(shè)置復(fù)數(shù)條隊列,并將該復(fù)數(shù)條隊列進(jìn)行編號,且每個消息體均包括復(fù)數(shù)個不同名稱的業(yè)務(wù)字段;
[0017]映射關(guān)系建立模塊,用于初次配置映射關(guān)系時,選取任意一個消息體中的任意一個業(yè)務(wù)字段作為該消息體的目標(biāo)字段,建立目標(biāo)字段與隊列編號之間的映射關(guān)系F(X)=Y,其中:x為該目標(biāo)字段的值,Y為隊列編號;
[0018]分隊列路由模塊,用于根據(jù)上述目標(biāo)字段的名稱從每個消息體中獲取業(yè)務(wù)字段,并將該業(yè)務(wù)字段作為每個消息體的目標(biāo)字段,分別將每個目標(biāo)字段的值X代入所述映射關(guān)系F(X) = Y,運算出每個消息體對應(yīng)的隊列編號Y,并將每個消息體分別發(fā)送到對應(yīng)的隊列中。
[0019]進(jìn)一步地,所述映射關(guān)系是通過一致性哈希算法或取模運算來建立的。
[0020]本發(fā)明具有如下優(yōu)點:本發(fā)明可以使得多條隊列傳輸同種業(yè)務(wù)消息,在保證單條消息的業(yè)務(wù)順序性的同時增加了吞吐量;多條隊列對于客戶端而言是透明的;消息就像在單條隊列中傳輸一樣,其消息傳輸?shù)乃俣群腿萘慷嫉玫酱蠓嵘?br>【附圖說明】
[0021]下面參照附圖結(jié)合實施例對本發(fā)明作進(jìn)一步的說明。
[0022]圖1為本發(fā)明一種擴(kuò)展消息中間件吞吐量的方法執(zhí)行流程圖。
【具體實施方式】
[0023]如圖1所示,本發(fā)明的一種擴(kuò)展消息中間件吞吐量的方法,包括如下步驟:
[0024]步驟1、設(shè)定業(yè)務(wù)類型為手機(jī)充值業(yè)務(wù),該業(yè)務(wù)類型的消息體總吞吐量為12000條,單條隊列的吞吐量為6000條,根據(jù)當(dāng)前發(fā)送的具有同種業(yè)務(wù)類型的消息體總吞吐量及消息中間件中單條隊列的吞吐量設(shè)置兩條隊列,并將隊列進(jìn)行編號:隊列I和隊列2,且每個消息體均包括復(fù)數(shù)個不同名稱的業(yè)務(wù)字段,針對業(yè)務(wù)類型為手機(jī)充值業(yè)務(wù)的消息體,每個消息體中均包括手機(jī)號和充值面額兩個業(yè)務(wù)字段;
[0025]步驟2、初次配置映射關(guān)系時,選取任意一個消息體中的任意一個業(yè)務(wù)字段(如手機(jī)號)作為目標(biāo)字段,建立目標(biāo)字段(如手機(jī)號)與隊列編號之間的映射關(guān)系F(X) =Y,其中:Χ為該目標(biāo)字段的值,Y為隊列編號;所述映射關(guān)系是通過取模運算來建立的,其映射關(guān)系為:如果手機(jī)號的數(shù)值最后一位是偶數(shù),則將該消息體發(fā)到隊列I中;如果手機(jī)號