專利名稱:一種提高消息服務(wù)器處理效率的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及J2EE應(yīng)用服務(wù)器,特別是涉及JMS消息服務(wù)器,主要應(yīng)用在電信網(wǎng)絡(luò)管理領(lǐng)域。
背景技術(shù):
近十幾年,電信網(wǎng)絡(luò)管理技術(shù)飛速發(fā)展。J2EE(Java 2 EnterpriseEdition)應(yīng)用服務(wù)器在電信網(wǎng)絡(luò)管理中的使用日趨廣泛,JMS(JavaMessaging Service)消息服務(wù)器是J2EE應(yīng)用服務(wù)器的一個重要組成部分,通常用在異步處理上。在電信網(wǎng)絡(luò)管理領(lǐng)域往往需要實時處理大量的異步上報的數(shù)據(jù),則容易出現(xiàn)性能瓶頸。
通常使用J2EE應(yīng)用服務(wù)器技術(shù)構(gòu)建的電信網(wǎng)管使用JMS的方式如下接收到網(wǎng)元上報的信息,轉(zhuǎn)換為一定的格式,然后發(fā)送到消息主題上。網(wǎng)元上報的數(shù)據(jù)的大小通常是變化的,有些小,有些大。將這些消息轉(zhuǎn)換成JMS消息的時是作為JMS消息的有效載荷,會導(dǎo)致JMS消息大小變化。在消息比較小的情況下,通過網(wǎng)絡(luò)發(fā)送到消息服務(wù)器上進(jìn)行處理的時候,消息太小會導(dǎo)致網(wǎng)絡(luò)調(diào)用頻繁。JMS消息服務(wù)器接收到消息后,需要對每條消息進(jìn)行處理,因此處理負(fù)擔(dān)也增加。
基于目前一些應(yīng)用服務(wù)器中JMS的實現(xiàn),如果能提出一種打包發(fā)送的方法,將多條消息合并到一條消息里面,就可以大幅提供JMS消息的發(fā)送和接收效率以及JMS消息服務(wù)器的處理效率。目前還沒有查到使用類似提高JMS處理效率的方法。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題是提供一種提高消息服務(wù)器處理效率的方法,解決現(xiàn)有應(yīng)用服務(wù)器的JMS實現(xiàn)技術(shù)沒有對消息進(jìn)行預(yù)處理,不能進(jìn)打包發(fā)送,處理效率較低的技術(shù)問題。
為達(dá)到上述目的,本發(fā)明提供了一種提高消息服務(wù)器處理效率的方法,其特點(diǎn)在于,在消息發(fā)送端,打包模塊對相同信息源發(fā)出的類似的原始消息打包到一個打包消息中,并將所述打包消息經(jīng)消息服務(wù)器發(fā)送到消息接收端,在消息接收端通過解包模塊將所述打包消息還原出所述原始消息,并將所述原始消息傳遞給消息接收者。
上述的方法,其特點(diǎn)在于,通過將所述打包模塊和所述解包模塊分別設(shè)置在所述消息服務(wù)器的發(fā)送接口和接收接口的內(nèi)側(cè),使所述消息服務(wù)器保持對外暴露標(biāo)準(zhǔn)的接口。
上述的方法,其特點(diǎn)在于,通過將所述打包模塊和所述解包模塊分別設(shè)置在所述消息服務(wù)器的發(fā)送接口和接收接口的外側(cè),使對消息的打包和解包能適用于不同的消息服務(wù)器。
上述的方法,其特點(diǎn)在于,所述消息發(fā)送端的處理流程進(jìn)一步包括如下步驟步驟A,用戶獲取所述發(fā)送接口的信息,同時為用戶創(chuàng)建一個延時任務(wù);步驟B,在達(dá)到所述延時任務(wù)的延時后,所述延時任務(wù)啟動,為用戶創(chuàng)建緩存隊列和定時任務(wù);步驟C,在用戶利用所述發(fā)送接口發(fā)送原始消息的過程中,如果所述延時任務(wù)已經(jīng)啟動,則所述原始消息被存儲到所述緩存隊列中;如果所述延時任務(wù)沒有啟動,則直接將所述原始消息發(fā)送到所述消息服務(wù)器;步驟D,在所述定時任務(wù)啟動后定時去讀取所述緩存隊列中的原始消息,并將所述緩存隊列中所有的原始消息打包成一個打包消息,然后將所述打包消息發(fā)送到所述消息服務(wù)器。
上述的方法,其特點(diǎn)在于,在所述步驟D中所述打包的方式是采用對象序列化到內(nèi)存,在進(jìn)行網(wǎng)絡(luò)傳輸?shù)臅r候,只傳輸內(nèi)存中的二進(jìn)制的映像。
上述的方法,其特點(diǎn)在于,在所述步驟D中,對內(nèi)存中的數(shù)據(jù)再實施通用的壓縮算法進(jìn)行壓縮后傳輸,進(jìn)一步提供傳送效率。
上述的方法,其特點(diǎn)在于,在所述步驟D中,通過標(biāo)準(zhǔn)位區(qū)分消息是原始消息還是打包消息,還通過標(biāo)準(zhǔn)位區(qū)分消息是否經(jīng)過了壓縮處理。
上述的方法,其特點(diǎn)在于,對于需要支持過濾器的情況,分析原始消息的消息頭,確保對過濾器特性一致的原始消息才打包到一個大的打包消息里面;對于過濾器特性不一致的原始消息則分開打包。
上述的方法,其特點(diǎn)在于,所述消息接收端的處理流程進(jìn)一步包括如下步驟步驟a,接收端的用戶通過所述解包模塊在所述消息服務(wù)器注冊為消息消費(fèi)者;步驟b,所述解包模塊接收到消息后區(qū)分收到的消息是原始消息還是打包消息,并將所述原始消息直接傳遞給對應(yīng)的消息消費(fèi)者,將所述打包消息通過對象反序列化的方式還原成原始消息,并將還原的原始消息傳遞給對應(yīng)的消息消費(fèi)者。
上述的方法,其特點(diǎn)在于,在所述步驟b中,如果接收到的消息經(jīng)過了壓縮,則在進(jìn)行對象反序列化前,先進(jìn)行解壓縮。
本發(fā)明的技術(shù)效果在于對于生成周期大于延時周期的發(fā)生者,消息直接發(fā)送到緩存隊列,發(fā)送效率高;如果原始發(fā)送的消息比較小,在一定的網(wǎng)絡(luò)條件下,如以太網(wǎng),這種打包發(fā)送提高了網(wǎng)絡(luò)傳輸?shù)男剩辉诖虬闆r下,JMS消息服務(wù)器不必對單條原始消息進(jìn)行處理,提高了JMS消息服務(wù)器的處理效率;在打包情況下,消息接收一次可以接收到多個消息,在網(wǎng)絡(luò)條件下,減少網(wǎng)絡(luò)傳送的次數(shù),提高了處理效率。
圖1是本發(fā)明方法中的打包、解包在JMS外部實現(xiàn)的示意圖;圖2是本發(fā)明方法中的打包、解包在JMS內(nèi)部實現(xiàn)的示意圖;圖3是本發(fā)明方法中的獲取消息發(fā)送者流程圖;圖4是本發(fā)明方法中的消息發(fā)送流程圖;圖5是本發(fā)明方法中的定時任務(wù)流程圖;圖6是本發(fā)明方法中的注冊消息消費(fèi)者流程圖;圖7是本發(fā)明方法中的消息接收流程圖;圖8是本發(fā)明方法中的JMS接口進(jìn)行封裝示意圖。
具體實施例方式
本發(fā)明通過對發(fā)送的消息進(jìn)行一種預(yù)處理,將需要發(fā)送的消息進(jìn)行打包,提高JMS消息的發(fā)送、接收效率和JMS消息服務(wù)器的處理效率。
本發(fā)明方法的基本設(shè)計內(nèi)容在于打包模塊對相同信息源發(fā)出的類似信息打包到一個大的JMS消息中,發(fā)送到JMS消息服務(wù)器。在消息的接收端,解包模塊接收到打包的消息后,打包模塊還原出原始的消息,將原始的消息再逐條傳遞給消息接收者。這種實現(xiàn)方式既可以做到JMS消息服務(wù)器的實現(xiàn)中,提高JMS處理消息的能力,同時保持對外暴露標(biāo)準(zhǔn)的接口,圖2是本發(fā)明方法中的打包、解包在JMS內(nèi)部實現(xiàn)的示意圖,如圖2所示,消息由消息發(fā)送者201開始,依次經(jīng)消息服務(wù)器客戶端(發(fā)送接口)和打包模塊202、消息服務(wù)器服務(wù)端203、解包模塊和消息服務(wù)器客戶端(接收接口)204,最后到達(dá)消息接收者205。
也可以將打包和還原的過程做到JMS消息服務(wù)器的外部,進(jìn)行一層封裝,在JMS消息服務(wù)器感覺不到的情況下進(jìn)行,圖1是本發(fā)明方法中的打包、解包在JMS外部實現(xiàn)的示意圖,如圖1所示,消息由消息發(fā)送者101開始,依次經(jīng)打包模塊102、消息服務(wù)器客戶端103(發(fā)送接口)、消息服務(wù)器服務(wù)端104、消息服務(wù)器客戶端105(接收接口)和解包模塊106,最后到達(dá)消息接收者107。
圖1中在JMS消息服務(wù)器的外部的方式對于JMS消息服務(wù)器沒有影響,因而這個方法可以適用于不同的JMS消息服務(wù)器,特別是在沒有辦法改動JMS消息服務(wù)器實現(xiàn)的情況下,作為一種優(yōu)化手段特別有用。對于使用JMS的開發(fā)者,使用的也是JMS的消息,相應(yīng)的發(fā)送、接收接口有所變化。
實現(xiàn)本發(fā)明方法的詳細(xì)步驟如下在消息的發(fā)送端;第一步用戶(指接口的使用者)獲取消息發(fā)送者接口,在獲取發(fā)送接口的同時為用戶創(chuàng)建一個延時任務(wù)。該延時任務(wù)為發(fā)送者創(chuàng)建一個消息緩存隊列和定時任務(wù)。該定時任務(wù)可以啟動一個線程,然后等待一定時間后執(zhí)行該定時任務(wù);也可以采用通用的定時調(diào)度機(jī)制,等調(diào)度時間到后執(zhí)行該定時任務(wù)。如果延時還未到發(fā)送者就被關(guān)閉了,則不會為該發(fā)送者產(chǎn)生緩存隊列和定時任務(wù)。圖3為獲取消息發(fā)送者的流程圖,該第一步具體包括
步驟301,用戶獲取消息發(fā)送者;步驟302,打包模塊為發(fā)送者延時創(chuàng)建一個消息緩存隊列和定時任務(wù);步驟303,打包模塊完成對JMS消息服務(wù)器注冊。
第二步延時任務(wù)的延時到后,任務(wù)啟動,為發(fā)送者創(chuàng)建緩存隊列和定時任務(wù)。任務(wù)執(zhí)行完畢后,延時任務(wù)關(guān)閉。
第三步用戶(指接口的使用者)通過發(fā)送者接口發(fā)送消息。如果第一步中的延時已到,緩存消息隊列被創(chuàng)建,則消息是發(fā)送到分配的本地的緩存中,會很快返回;如果第一步中延時未到,則消息直接發(fā)送到JMS消息服務(wù)器,圖4是消息發(fā)送流程圖,如圖4所示,該第三步包括步驟401,用戶通過發(fā)送者接口發(fā)送消息;步驟402,打包模塊收到消息;步驟403,判斷延時任務(wù)是否執(zhí)行,是則執(zhí)行步驟404,否則執(zhí)行步驟405;步驟404,將消息發(fā)送到緩存隊列,轉(zhuǎn)到步驟407;步驟405,將消息執(zhí)行發(fā)送到JMS消息服務(wù)器;步驟406,到達(dá)JMS消息服務(wù)器;步驟407,消息發(fā)送流程結(jié)束。
第四步定時任務(wù)啟動后定時去讀取消息緩存隊列中的消息,將隊列中的所有消息進(jìn)行打包成一個大的JMS消息,然后將這個大的打包后的消息發(fā)送到JMS服務(wù)器,如圖5所示。打包的方式是采用對象序列化到內(nèi)存。在進(jìn)行網(wǎng)絡(luò)傳輸?shù)臅r候,只傳輸內(nèi)存中的二進(jìn)制的映像。可以對內(nèi)存中的數(shù)據(jù)再實施通用的壓縮算法進(jìn)行壓縮后傳輸,進(jìn)一步提供傳送效率。打包消息還是原始消息是通過一個標(biāo)志位進(jìn)行區(qū)分的。打包消息是否經(jīng)過了壓縮處理,也是通過標(biāo)準(zhǔn)位進(jìn)行區(qū)分的。對于需要支持過濾器的情況,分析消息頭,確保對過濾器特性一致的消息才打包到一個大的消息里面;對于過濾器特性不一致的消息則分開打包。如圖5的定時任務(wù)流程圖所示,該第四步具體包括步驟501,定時任務(wù)啟動;步驟502,定時到;步驟503,到緩存隊列中獲取消息并進(jìn)行序列化成到一個byte(比特)二維數(shù)組;
步驟504發(fā)送到JMS消息服務(wù)器服務(wù)端。
在消息的接收端第一步用戶注冊消息消費(fèi)者。如圖6所示,具體包括步驟601,用戶注冊監(jiān)聽器;步驟602,向解包模塊注冊消息接收者,解包模塊代理接收者注冊到JMS消息服務(wù)器服務(wù)端;步驟603,注冊到JMS消息服務(wù)器服務(wù)端。
第二步解包模塊接收到消息后需要區(qū)分收到的消息是打包的消息還是原始的消息。區(qū)分的方法是使用發(fā)送時帶的標(biāo)準(zhǔn)位。如果是原始的消息,則將這個消息直接傳遞給的消息消費(fèi)者;如果這個是一個打包的消息,則通過對象反序列化的方式還原成原始的消息,將還原后的原始消息傳遞給的消息消費(fèi)者,如圖7的消息接收流程圖所示。如果標(biāo)準(zhǔn)位標(biāo)識消息經(jīng)過了壓縮,則在進(jìn)行對象反序列化前,先進(jìn)行解壓縮。圖7中具體包括步驟701,開始接收消息;步驟702,解包模塊接收到JMS消息;步驟703,判斷接收到的JMS消息是否是打包消息,是則執(zhí)行步驟704,否則執(zhí)行步驟705;步驟704,將打包消息還原成原始消息傳遞給消費(fèi)者,轉(zhuǎn)到步驟706;步驟705,直接將消息傳遞給消費(fèi)者;步驟706,消費(fèi)者處理消息,返回步驟702。
上面描述的優(yōu)化方法可以作為一種優(yōu)化的JMS內(nèi)部實現(xiàn),也可以通過封裝標(biāo)準(zhǔn)的JMS接口,作為JMS外部優(yōu)化手段在JMS外部實現(xiàn)。我們結(jié)合電信網(wǎng)絡(luò)管理領(lǐng)域的實際情況,給出了一種封裝實現(xiàn),具體如下首先,對JMS定義的接口進(jìn)行封裝,提供封裝接口,如圖8所示,封裝接口802中封裝了JMS連接803、JMS會話804、JMS主題/隊列805,用戶801連接該封裝接口802。在標(biāo)準(zhǔn)的JMS接口中,進(jìn)行一條消息的發(fā)送需要經(jīng)過若干個步驟。通過對于原始接口的封裝,簡化了流程,同時提供了實施上文描述的優(yōu)化方法的空間。封裝接口分別提供訂閱和發(fā)布接口。
在消息發(fā)送端,1)用戶獲取消息發(fā)送者。
這里可以簡化用戶對于JMS接口使用,可以通過一個調(diào)用完成使用原始接口需要好幾個調(diào)用才能完成的任務(wù)。并且通過java.util.Timer為該接口創(chuàng)建一個延時任務(wù),該延時任務(wù)將在幾秒后啟動,如果用戶在延時任務(wù)啟動之前關(guān)閉了消息發(fā)送者,則該延時任務(wù)被取消。
2)延時任務(wù)的延時到。
當(dāng)延時任務(wù)的延時到后,就為該發(fā)送者創(chuàng)建一個在內(nèi)存中的緩存隊列和定時任務(wù)。這個定時任務(wù)現(xiàn)在是通過啟動一個線程,然后該線程Sleep(休眠)一段時間后執(zhí)行該任務(wù)來實現(xiàn)。定時任務(wù)到后,從緩存隊列讀取消息,將每個消息序列化,放到一個byte數(shù)組里面,整個隊列的消息就序列化成一個byte的二維數(shù)組。然后將內(nèi)存中的二維數(shù)組作為一個對象,放到JMS的ObjectMessage(對象信息)里面,發(fā)送到JMS消息服務(wù)器。
3)延時任務(wù)未執(zhí)行時的消息發(fā)送。
如果延時任務(wù)未到,任務(wù)沒有得到執(zhí)行,該發(fā)送者的消息隊列沒有被創(chuàng)建,則消息直接發(fā)送到JMS消息服務(wù)器。
在消息接收端,1)通過封裝接口注冊消息接收者。
通過封裝接口代理消息接收者注冊到JMS消息服務(wù)器。這個代理接收者接收到消息后再將消息轉(zhuǎn)給用戶的消息接收者。
2)代理接收者接收消息首先確定消息是否是打包的消息,如果是打包的消息,則將消息進(jìn)行反序列化重建出原始的消息,將原始的消息傳遞給用戶的消息接受者。這樣一個消息就從消息源路由到消息的目的地了。
由上述可知,使用本發(fā)明方法具有如下有益效果對于生成周期大于延時周期的發(fā)生者,消息直接發(fā)送到緩存隊列,發(fā)送效率高;如果原始發(fā)送的消息比較小,在一定的網(wǎng)絡(luò)條件下,如以太網(wǎng),這種打包發(fā)送提高了網(wǎng)絡(luò)傳輸?shù)男剩辉诖虬闆r下,JMS消息服務(wù)器不必對單條原始消息進(jìn)行處理,提高了JMS消息服務(wù)器的處理效率;在打包情況下,消息接收一次可以接收到多個消息,在網(wǎng)絡(luò)條件下,減少網(wǎng)絡(luò)傳送的次數(shù),提高了處理效率。
以上所述僅為本發(fā)明的較佳實施例,并非用來限定本發(fā)明的實施范圍;凡是依本發(fā)明所作的等效變化與修改,都被本發(fā)明的專利范圍所涵蓋。
權(quán)利要求
1.一種提高消息服務(wù)器處理效率的方法,其特征在于,在消息發(fā)送端,打包模塊對相同信息源發(fā)出的類似的原始消息打包到一個打包消息中,并將所述打包消息經(jīng)消息服務(wù)器發(fā)送到消息接收端,在消息接收端通過解包模塊將所述打包消息還原出所述原始消息,并將所述原始消息傳遞給消息接收者。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,通過將所述打包模塊和所述解包模塊分別設(shè)置在所述消息服務(wù)器的發(fā)送接口和接收接口的內(nèi)側(cè),使所述消息服務(wù)器保持對外暴露標(biāo)準(zhǔn)的接口。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,通過將所述打包模塊和所述解包模塊分別設(shè)置在所述消息服務(wù)器的發(fā)送接口和接收接口的外側(cè),使對消息的打包和解包能適用于不同的消息服務(wù)器。
4.根據(jù)權(quán)利要求2或3所述的方法,其特征在于,所述消息發(fā)送端的處理流程進(jìn)一步包括如下步驟步驟A,用戶獲取所述發(fā)送接口的信息,同時為用戶創(chuàng)建一個延時任務(wù);步驟B,在達(dá)到所述延時任務(wù)的延時后,所述延時任務(wù)啟動,為用戶創(chuàng)建緩存隊列和定時任務(wù);步驟C,在用戶利用所述發(fā)送接口發(fā)送原始消息的過程中,如果所述延時任務(wù)已經(jīng)啟動,則所述原始消息被存儲到所述緩存隊列中;如果所述延時任務(wù)沒有啟動,則直接將所述原始消息發(fā)送到所述消息服務(wù)器;步驟D,在所述定時任務(wù)啟動后定時去讀取所述緩存隊列中的原始消息,并將所述緩存隊列中所有的原始消息打包成一個打包消息,然后將所述打包消息發(fā)送到所述消息服務(wù)器。
5.根據(jù)權(quán)利要求4所述的方法,其特征在于,在所述步驟D中所述打包的方式是采用對象序列化到內(nèi)存,在進(jìn)行網(wǎng)絡(luò)傳輸?shù)臅r候,只傳輸內(nèi)存中的二進(jìn)制的映像。
6.根據(jù)權(quán)利要求5所述的方法,其特征在于,在所述步驟D中,對內(nèi)存中的數(shù)據(jù)再實施通用的壓縮算法進(jìn)行壓縮后傳輸,進(jìn)一步提供傳送效率。
7.根據(jù)權(quán)利要求6所述的方法,其特征在于,在所述步驟D中,通過標(biāo)準(zhǔn)位區(qū)分消息是原始消息還是打包消息,還通過標(biāo)準(zhǔn)位區(qū)分消息是否經(jīng)過了壓縮處理。
8.根據(jù)權(quán)利要求6所述的方法,其特征在于,對于需要支持過濾器的情況,分析原始消息的消息頭,確保對過濾器特性一致的原始消息才打包到一個大的打包消息里面;對于過濾器特性不一致的原始消息則分開打包。
9.根據(jù)權(quán)利要求2或3所述的方法,其特征在于,所述消息接收端的處理流程進(jìn)一步包括如下步驟步驟a,接收端的用戶通過所述解包模塊在所述消息服務(wù)器注冊為消息消費(fèi)者;步驟b,所述解包模塊接收到消息后區(qū)分收到的消息是原始消息還是打包消息,并將所述原始消息直接傳遞給對應(yīng)的消息消費(fèi)者,將所述打包消息通過對象反序列化的方式還原成原始消息,并將還原的原始消息傳遞給對應(yīng)的消息消費(fèi)者。
10.根據(jù)權(quán)利要求9所述的方法,其特征在于,在所述步驟b中,如果接收到的消息經(jīng)過了壓縮,則在進(jìn)行對象反序列化前,先進(jìn)行解壓縮。
全文摘要
本發(fā)明公開了一種提高消息服務(wù)器處理效率的方法,其特點(diǎn)在于,在消息發(fā)送端,打包模塊對相同信息源發(fā)出的類似的原始消息打包到一個打包消息中,并將所述打包消息經(jīng)消息服務(wù)器發(fā)送到消息接收端,在消息接收端通過解包模塊將所述打包消息還原出所述原始消息,并將所述原始消息傳遞給消息接收者。本發(fā)明通過對發(fā)送的消息進(jìn)行一種預(yù)處理,將需要發(fā)送的消息進(jìn)行打包,提高了JMS消息的發(fā)送、接收效率和JMS消息服務(wù)器的處理效率。
文檔編號H04Q11/00GK101094167SQ20061008936
公開日2007年12月26日 申請日期2006年6月21日 優(yōu)先權(quán)日2006年6月21日
發(fā)明者魏國強(qiáng), 方馬, 田珂 申請人:中興通訊股份有限公司