專(zhuān)利名稱(chēng):一種消息存儲(chǔ)方法、裝置及一種消息處理系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及網(wǎng)絡(luò)技術(shù)領(lǐng)域,特別是涉及一種消息存儲(chǔ)方法、裝置及一種消息處理系統(tǒng)。
背景技術(shù):
在很多應(yīng)用系統(tǒng)中,都涉及數(shù)據(jù)存儲(chǔ)問(wèn)題。例如圖l所示的應(yīng)用系統(tǒng),包
括消息發(fā)布端Ull、消息訂閱端U12和消息中間件U13,消息發(fā)布端Ull和消息訂閱端U12之間通過(guò)消息中間件U13傳送消息數(shù)據(jù)。其中,所述消息發(fā)布端Ull可以發(fā)布各種主題或各種類(lèi)型的消息數(shù)據(jù),所述消息訂閱端U12可以訂閱自己感興趣的消息,所述消息中間件U13要將消息發(fā)布端Ull發(fā)布的消息異步地傳送給該消息主題的訂閱端U12。在消息傳遞的過(guò)程中,所述消息中間件U13 —方面要接收消息,另一方面還要把接收的消息轉(zhuǎn)發(fā)出去,為了避免丟失消息,消息中間件U13需要將當(dāng)前沒(méi)有發(fā)送完或發(fā)送沒(méi)有成功的消息存儲(chǔ)到數(shù)據(jù)庫(kù)U14中,直到消息發(fā)送成功才將消息刪除。
目前,所述系統(tǒng)采用單節(jié)點(diǎn)的方式存儲(chǔ)消息,即只部署一個(gè)數(shù)據(jù)庫(kù)U14進(jìn)行存儲(chǔ)。但隨著消息數(shù)量的增多,這種單節(jié)點(diǎn)存儲(chǔ)存在以下問(wèn)題
第一,如果該存儲(chǔ)節(jié)點(diǎn)出現(xiàn)了問(wèn)題,就會(huì)導(dǎo)致消息中間件的處理中斷,不能提供正常的服務(wù);
第二,如果消息流量^[艮大, 一個(gè)節(jié)點(diǎn)作為存儲(chǔ)可能承擔(dān)不了這樣的壓力,該存儲(chǔ)節(jié)點(diǎn)可能會(huì)成為整個(gè)系統(tǒng)的瓶頸。
上述問(wèn)題在實(shí)際應(yīng)用中比較常見(jiàn),例如該系統(tǒng)在電子交易中的應(yīng)用每筆交易會(huì)經(jīng)歷多個(gè)處理狀態(tài),而每個(gè)交易的每個(gè)狀態(tài)的變更都會(huì)產(chǎn)生一條消息,因此消息量非常大;這些消息由消息發(fā)布端Ull發(fā)布到消息中間件U13,再由消息中間件U13傳送給消息訂閱端U12,如果配置一個(gè)數(shù)據(jù)庫(kù)U14來(lái)存儲(chǔ)消息內(nèi)容,很容易造成消息中間件U1的處理瓶頸,并且需由一個(gè)數(shù)據(jù)庫(kù)來(lái)承擔(dān)所有的風(fēng)險(xiǎn)。
當(dāng)然,在其他采用單節(jié)點(diǎn)存儲(chǔ)數(shù)據(jù)的應(yīng)用系統(tǒng)中,也存在上述的問(wèn)題。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問(wèn)題是提供一種消息存儲(chǔ)方法及裝置,以解決現(xiàn)有技術(shù)中釆用單節(jié)點(diǎn)存儲(chǔ)所存在的問(wèn)題。
本發(fā)明的另一個(gè)目的是提供一種消息處理系統(tǒng),解決單節(jié)點(diǎn)存儲(chǔ)待轉(zhuǎn)發(fā)的消息容易造成系統(tǒng)瓶頸或處理中斷的問(wèn)題。
為解決上述技術(shù)問(wèn)題,根據(jù)本發(fā)明提供的具體實(shí)施例,本發(fā)明公開(kāi)了以下
技術(shù)方案
一種消息存儲(chǔ)方法,包括接收消息添加請(qǐng)求;
從預(yù)置的存儲(chǔ)節(jié)點(diǎn)列表中選擇一個(gè)存儲(chǔ)節(jié)點(diǎn),存儲(chǔ)該消息;
將該消息與存儲(chǔ)該消息的存儲(chǔ)節(jié)點(diǎn)之間的映射關(guān)系進(jìn)行保存。
其中,所述從預(yù)置的存儲(chǔ)節(jié)點(diǎn)列表中輪詢(xún)或隨機(jī)選擇一個(gè)存儲(chǔ)節(jié)點(diǎn)。
其中,所述將該消息與存儲(chǔ)該消息的存儲(chǔ)節(jié)點(diǎn)之間的映射關(guān)系進(jìn)行保存,
具體包括每個(gè)消息對(duì)應(yīng)一個(gè)元數(shù)據(jù),所述元數(shù)據(jù)中存有消息標(biāo)識(shí)信息;將存
儲(chǔ)該消息的存儲(chǔ)節(jié)點(diǎn)的描述信息存儲(chǔ)在對(duì)應(yīng)該消息的元數(shù)據(jù)中,該元數(shù)據(jù)中的
消息標(biāo)識(shí)信息與存儲(chǔ)節(jié)點(diǎn)的描述信息形成映射關(guān)系。
優(yōu)選的,所述保存之后還包括根據(jù)消息與存儲(chǔ)該消息的存儲(chǔ)節(jié)點(diǎn)之間的
映射關(guān)系,獲取消息并進(jìn)行發(fā)送或刪除操作。
優(yōu)選的,所述方法還包括通過(guò)動(dòng)態(tài)修改所述存儲(chǔ)節(jié)點(diǎn)列表,增加或刪除
存儲(chǔ)節(jié)點(diǎn)。
優(yōu)選的,所述動(dòng)態(tài)修改具體包括通過(guò)JMX方式,在運(yùn)行過(guò)程中修改所述存儲(chǔ)節(jié)點(diǎn)列表。
本發(fā)明還提供了一種消息存儲(chǔ)裝置,包括一個(gè)或多個(gè)存儲(chǔ)節(jié)點(diǎn),每個(gè)存儲(chǔ)節(jié)點(diǎn)用于存儲(chǔ)消息;消息接收單元,用于接收消息添加請(qǐng)求;
節(jié)點(diǎn)選擇單元,用于從預(yù)置的存儲(chǔ)節(jié)點(diǎn)列表中選擇一個(gè)存儲(chǔ)節(jié)點(diǎn)來(lái)存儲(chǔ)該消息;
映射關(guān)系保存單元,用于將該消息與存儲(chǔ)該消息的存儲(chǔ)節(jié)點(diǎn)之間的映射關(guān)系進(jìn)行保存。其中,所述映射關(guān)系保存單元為元數(shù)據(jù),每個(gè)消息對(duì)應(yīng)一個(gè)元數(shù)據(jù),所述元數(shù)據(jù)中存有消息標(biāo)識(shí)信息,并將存儲(chǔ)該消息的存儲(chǔ)節(jié)點(diǎn)的描述信息進(jìn)行保
存;該元數(shù)據(jù)中的消息標(biāo)識(shí)信息與存儲(chǔ)節(jié)點(diǎn)的描述信息形成映射關(guān)系。
優(yōu)選的,所述裝置還包括消息獲取單元,用于根據(jù)消息與存儲(chǔ)該消息的存儲(chǔ)節(jié)點(diǎn)之間的映射關(guān)系,獲取消息并觸發(fā)發(fā)送或刪除操作。
優(yōu)選的,所述裝置還包括節(jié)點(diǎn)調(diào)整單元,用于通過(guò)動(dòng)態(tài)修改所述存儲(chǔ)節(jié)點(diǎn)列表,增加或刪除存儲(chǔ)節(jié)點(diǎn)。
本發(fā)明還提供了一種消息處理系統(tǒng),包括
消息發(fā)布端,用于將消息發(fā)布到消息中間件;
消息訂閱端,用于從消息中間件接收消息;
一個(gè)或多個(gè)數(shù)據(jù)庫(kù),用于與消息中間件連接,存儲(chǔ)消息中間件轉(zhuǎn)發(fā)的消息;消息中間件,用于轉(zhuǎn)發(fā)消息,具體包括消息接收單元,用于從消息發(fā)布
端接收消息添加請(qǐng)求;數(shù)據(jù)庫(kù)選擇單元,用于從預(yù)置的數(shù)據(jù)庫(kù)列表中選擇一個(gè)
數(shù)據(jù)庫(kù)來(lái)存儲(chǔ)該消息;映射關(guān)系保存單元,用于將該消息與存儲(chǔ)該消息的數(shù)據(jù)
庫(kù)之間的映射關(guān)系進(jìn)行保存。
優(yōu)選的,所述消息中間件還包括數(shù)據(jù)庫(kù)調(diào)整單元,用于通過(guò)動(dòng)態(tài)修改所
述數(shù)據(jù)庫(kù)列表,增加或刪除數(shù)據(jù)庫(kù)。
根據(jù)本發(fā)明提供的具體實(shí)施例,本發(fā)明具有以下技術(shù)效果首先,本發(fā)明采用多個(gè)存儲(chǔ)節(jié)點(diǎn)來(lái)存儲(chǔ)消息,當(dāng)存儲(chǔ)某個(gè)消息時(shí),通過(guò)存儲(chǔ)節(jié)點(diǎn)列表選擇一個(gè)節(jié)點(diǎn)進(jìn)行存儲(chǔ),并把該消息與存儲(chǔ)該消息的存儲(chǔ)節(jié)點(diǎn)之間的映射關(guān)系也進(jìn)行保存,以便后續(xù)根據(jù)所述映射關(guān)系從相應(yīng)的存儲(chǔ)節(jié)點(diǎn)獲取消息。所述方案能夠避免現(xiàn)有^l支術(shù)單節(jié)點(diǎn)存儲(chǔ)的兩個(gè)問(wèn)題
第一,如果其中一個(gè)存儲(chǔ)節(jié)點(diǎn)出現(xiàn)了問(wèn)題,還可以將消息存儲(chǔ)到其他節(jié)點(diǎn)上,因此不會(huì)造成消息中間件不能正常工作;
第二,如果消息流量很大,多個(gè)存儲(chǔ)節(jié)點(diǎn)可以分散存儲(chǔ)上的壓力。其次,本發(fā)明支持運(yùn)行時(shí)調(diào)整存儲(chǔ)節(jié)點(diǎn)的數(shù)量。如果在運(yùn)行期間發(fā)現(xiàn)存儲(chǔ)節(jié)點(diǎn)不夠用,可以動(dòng)態(tài)增加存儲(chǔ)節(jié)點(diǎn);或者,如果節(jié)點(diǎn)過(guò)剩出現(xiàn)閑置情況,還可以動(dòng)態(tài)刪除節(jié)點(diǎn)。而且,所述動(dòng)態(tài)是指在運(yùn)行期間修改存儲(chǔ)節(jié)點(diǎn)列表來(lái)增加
6或刪除節(jié)點(diǎn),區(qū)別于修改存儲(chǔ)節(jié)點(diǎn)列表配置后重啟應(yīng)用才能實(shí)現(xiàn)修改功能的方式。這種動(dòng)態(tài)方式不需要重啟應(yīng)用,因此更加方便實(shí)用。
再次,本發(fā)明優(yōu)先釆用輪詢(xún)的方式從列表中選擇一個(gè)節(jié)點(diǎn),因此能夠動(dòng)態(tài)調(diào)整分配到每個(gè)存儲(chǔ)節(jié)點(diǎn)上的壓力,使各個(gè)存儲(chǔ)節(jié)點(diǎn)的壓力盡量均衡。
圖1是現(xiàn)有技術(shù)實(shí)施例所述消息存儲(chǔ)系統(tǒng)的結(jié)構(gòu)圖2是本發(fā)明實(shí)施例一所述的多存儲(chǔ)節(jié)點(diǎn)示意圖3是本發(fā)明實(shí)施例一所述一種消息存儲(chǔ)方法的流程圖4是本發(fā)明實(shí)施例一所述一種消息存儲(chǔ)裝置的結(jié)構(gòu)圖5是本發(fā)明實(shí)施例二所述一種消息處理系統(tǒng)的結(jié)構(gòu)圖6是本發(fā)明實(shí)施例二中消息添加流程圖7是本發(fā)明實(shí)施例二中消息獲取流程圖8是本發(fā)明實(shí)施例二中消息刪除流程圖9是本發(fā)明實(shí)施例二中消息中間件的內(nèi)部結(jié)構(gòu)圖。
具體實(shí)施例方式
為使本發(fā)明的上述目的、特征和優(yōu)點(diǎn)能夠更加明顯易懂,下面結(jié)合附圖和具體實(shí)施方式
對(duì)本發(fā)明作進(jìn)一步詳細(xì)的說(shuō)明。
本發(fā)明提供了 一種消息存儲(chǔ)方法和裝置,是對(duì)現(xiàn)有技術(shù)中單節(jié)點(diǎn)存儲(chǔ)的改進(jìn)。下面通過(guò)實(shí)施例一和實(shí)施例二進(jìn)4于詳細(xì)i兌明。
實(shí)施例一
首先介紹多存儲(chǔ)節(jié)點(diǎn)的結(jié)構(gòu)。參照?qǐng)D2,是實(shí)施例一所述的多存儲(chǔ)節(jié)點(diǎn)示意圖。應(yīng)用服務(wù)器U21連接著多個(gè)存儲(chǔ)節(jié)點(diǎn)U22 (圖中示出了 3個(gè)),應(yīng)用服務(wù)器U21用于提供應(yīng)用服務(wù),如消息轉(zhuǎn)發(fā)等,并把需要保存的數(shù)據(jù)存儲(chǔ)到存儲(chǔ)節(jié)點(diǎn)U22中。
參照?qǐng)D3,是對(duì)照?qǐng)D2的多存儲(chǔ)節(jié)點(diǎn)結(jié)構(gòu),提供的一種消息存儲(chǔ)方法的流程圖。
5301, 應(yīng)用服務(wù)器接收消息添加請(qǐng)求;
5302, 從預(yù)置的存儲(chǔ)節(jié)點(diǎn)列表中選擇一個(gè)存儲(chǔ)節(jié)點(diǎn),存儲(chǔ)該消息;應(yīng)用服務(wù)器配置了 一個(gè)存儲(chǔ)節(jié)點(diǎn)列表,將當(dāng)前能夠使用的存儲(chǔ)節(jié)點(diǎn)信息列在該表中。當(dāng)有消息需要存儲(chǔ)時(shí),應(yīng)用服務(wù)器查詢(xún)?cè)摫恚瑥闹羞x擇一個(gè)節(jié)點(diǎn)來(lái)存4渚該消息。
為了均衡各存儲(chǔ)節(jié)點(diǎn)的存儲(chǔ)壓力,可以采用輪詢(xún)或隨機(jī)的方式來(lái)選擇一個(gè)存儲(chǔ)節(jié)點(diǎn)。本實(shí)施例優(yōu)先采用輪詢(xún)方式,即輪詢(xún)列表中的每個(gè)存儲(chǔ)節(jié)點(diǎn),根據(jù)各節(jié)點(diǎn)的存儲(chǔ)情況來(lái)選擇合適的節(jié)點(diǎn),這樣就能夠動(dòng)態(tài)調(diào)整分配到每個(gè)存儲(chǔ)節(jié)點(diǎn)上的壓力,使各個(gè)存儲(chǔ)節(jié)點(diǎn)的壓力盡量均衡。
S303,將該消息與存儲(chǔ)該消息的存儲(chǔ)節(jié)點(diǎn)之間的映射關(guān)系進(jìn)行保存。
應(yīng)用服務(wù)器將所述映射關(guān)系保存,以便后續(xù)根據(jù)所述映射關(guān)系從相應(yīng)的存儲(chǔ)節(jié)點(diǎn)獲取消息。存儲(chǔ)映射關(guān)系時(shí),可以把消息ID (即消息標(biāo)識(shí)信息)及與之對(duì)應(yīng)的存儲(chǔ)節(jié)點(diǎn)的描述信息以映射關(guān)系表的方式進(jìn)行保存,所述描述信息包括該存儲(chǔ)節(jié)點(diǎn)的ID、地址等信息。
所述方法能夠避免現(xiàn)有技術(shù)單節(jié)點(diǎn)存儲(chǔ)的兩個(gè)問(wèn)題
第一,如果其中一個(gè)存儲(chǔ)節(jié)點(diǎn)出現(xiàn)了問(wèn)題,還可以將消息存儲(chǔ)到其他節(jié)點(diǎn)上,因此不會(huì)造成消息中間件不能正常工作;
第二,如果消息流量^艮大,多個(gè)存儲(chǔ)節(jié)點(diǎn)可以分散存儲(chǔ)上的壓力。
優(yōu)選的,本實(shí)施例提供的多存儲(chǔ)節(jié)點(diǎn)結(jié)構(gòu)還可以動(dòng)態(tài)調(diào)整如果應(yīng)用服務(wù)器在運(yùn)行期間發(fā)現(xiàn)存儲(chǔ)節(jié)點(diǎn)不夠用,通過(guò)修改存儲(chǔ)列表中的節(jié)點(diǎn)信息可以動(dòng)態(tài)增加存儲(chǔ)節(jié)點(diǎn);或者,如果節(jié)點(diǎn)過(guò)剩出現(xiàn)閑置情況,通過(guò)修改存儲(chǔ)列表中的節(jié)點(diǎn)信息還可以動(dòng)態(tài)刪除節(jié)點(diǎn)。
這一點(diǎn)區(qū)別于節(jié)點(diǎn)數(shù)量固定的方式。節(jié)點(diǎn)數(shù)量固定的方式是指連接應(yīng)用服務(wù)器的存儲(chǔ)節(jié)點(diǎn)數(shù)量固定,不能隨意增加或刪除其中的節(jié)點(diǎn)。因?yàn)檫@種方式一般采用哈希算法根據(jù)消息的ID把消息內(nèi)容映射到某個(gè)存儲(chǔ)節(jié)點(diǎn)上,這種映射關(guān)系的建立首先要確定哈希后值的范圍(即存儲(chǔ)節(jié)點(diǎn)的數(shù)量),然后將ID映射到這個(gè)數(shù)字范圍內(nèi)。所以如果增加了節(jié)點(diǎn),就要調(diào)整哈希算法,否則新加入的節(jié)點(diǎn)不能被使用。而如果調(diào)整了哈希算法,則同樣的一個(gè)ID,用原來(lái)的算法和現(xiàn)在的算法,得到的哈希值可能是不同的,那么根據(jù)原來(lái)的映射結(jié)果存儲(chǔ)的消息要進(jìn)行轉(zhuǎn)移,而這是很復(fù)雜和麻煩的。因此, 一個(gè)存儲(chǔ)節(jié)點(diǎn)失效會(huì)導(dǎo)致一大批的消息沒(méi)有辦法處理;而且,如果在運(yùn)行時(shí)發(fā)現(xiàn)存儲(chǔ)節(jié)點(diǎn)不夠用,動(dòng)態(tài)的增加節(jié)點(diǎn)會(huì)非常復(fù)雜。
而本實(shí)施例是在消息中間件中維護(hù)了 一個(gè)映射關(guān)系表,通過(guò)這個(gè)表可以根據(jù)消息ID找到消息存放的存儲(chǔ)節(jié)點(diǎn)。這種映射不同于一般的哈希算法,其建立過(guò)程不需要考慮節(jié)點(diǎn)數(shù)量,因此不會(huì)存在上述問(wèn)題。而且,產(chǎn)生這個(gè)映射關(guān)
系的算法可以有多種,可以是Round Robin這樣輪轉(zhuǎn)的方案,也可以采用Weighted Round Robin這樣的帶有節(jié)點(diǎn)權(quán)重信息的方案。
Round Robin方案即輪詢(xún)調(diào)度(Round Robin Scheduling)算法,就是以輪詢(xún)的方式依次將請(qǐng)求調(diào)度不同的服務(wù)器,即每次調(diào)度執(zhí)行I二(I+l)modn,并選出第i臺(tái)服務(wù)器。算法的優(yōu)點(diǎn)是其簡(jiǎn)潔性,它無(wú)需記錄當(dāng)前所有連接的狀態(tài),所以它是一種無(wú)狀態(tài)調(diào)度。Weighted Round Robin方案是在此基礎(chǔ)上改進(jìn)的權(quán)重輪詢(xún)算法。
此外,本實(shí)施例中所述的"動(dòng)態(tài)調(diào)整"是指在應(yīng)用服務(wù)器運(yùn)行期間進(jìn)行的調(diào)整,區(qū)別于修改存儲(chǔ)節(jié)點(diǎn)列表配置后重啟應(yīng)用服務(wù)器才能實(shí)現(xiàn)修改功能的方式。這種動(dòng)態(tài)方式不需要重啟應(yīng)用,因此更加方便實(shí)用。
實(shí)現(xiàn)所述的"動(dòng)態(tài)調(diào)整"的方法有多種,本實(shí)施例采用JMX方式。JMX是Java Management Extensions,是指Java管理擴(kuò)展,是一種運(yùn)行時(shí)查看應(yīng)用信息并管理應(yīng)用的方式。被管理的應(yīng)用會(huì)注冊(cè)Mbean(可以理解為被管理的單元)到Server上,而管理段連接到應(yīng)用服務(wù)器上就可以查看Mbean中暴露的信息和進(jìn)行管理。例如,應(yīng)用服務(wù)器上的一個(gè)Mbean暴露了當(dāng)前可用的存儲(chǔ)節(jié)點(diǎn)的列表信息,是可讀寫(xiě)的,那么用戶(hù)可以查看當(dāng)前的存儲(chǔ)節(jié)點(diǎn)的列表信息,也可以修改這個(gè)列表的內(nèi)容,達(dá)到運(yùn)行時(shí)修改列表的目的。當(dāng)然,也可以有其他實(shí)現(xiàn)方式,例如創(chuàng)建可以訪問(wèn)存儲(chǔ)節(jié)點(diǎn)列表的端口,應(yīng)用服務(wù)器通過(guò)這個(gè)端口就可以在運(yùn)行時(shí)修改列表內(nèi)容了 。
針對(duì)上述方法實(shí)施例,本發(fā)明還提供了相應(yīng)的裝置實(shí)施例。參照?qǐng)D4,是實(shí)施例一所述一種消息存儲(chǔ)裝置的結(jié)構(gòu)圖。所述裝置主要包括
存儲(chǔ)節(jié)點(diǎn)U41,用于存儲(chǔ)消息;
消息接收單元U42,用于接收消息添加請(qǐng)求;
節(jié)點(diǎn)選捧單元U43,用于從預(yù)置的存儲(chǔ)節(jié)點(diǎn)列表中選擇一個(gè)存儲(chǔ)節(jié)點(diǎn)來(lái)存儲(chǔ)該消息;映射關(guān)系保存單元U44,用于將該消息與存儲(chǔ)該消息的存儲(chǔ)節(jié)點(diǎn)之間的映射關(guān)系進(jìn)行保存。
其中,所述存儲(chǔ)節(jié)點(diǎn)U41通常是多個(gè),但也不排除一個(gè)存儲(chǔ)節(jié)點(diǎn)的情況。所述節(jié)點(diǎn)選擇單元U43可以采取輪詢(xún)或隨機(jī)的方式選擇多個(gè)存儲(chǔ)節(jié)點(diǎn)中的一個(gè)。
所述裝置提供的多節(jié)點(diǎn)存儲(chǔ)結(jié)構(gòu),在消息流量增大時(shí)可以分散存儲(chǔ)壓力,而且能夠避免一個(gè)節(jié)點(diǎn)出問(wèn)題而影響正常的工作。
優(yōu)選的,所述裝置還可以包括消息獲取單元U45,用于才艮據(jù)消息與存儲(chǔ)該消息的存儲(chǔ)節(jié)點(diǎn)之間的映射關(guān)系,獲取消息并觸發(fā)發(fā)送或刪除操作。
優(yōu)選的,所述裝置還可以包括節(jié)點(diǎn)調(diào)整單元U46,用于通過(guò)動(dòng)態(tài)修改所述存儲(chǔ)節(jié)點(diǎn)列表,增加或刪除存儲(chǔ)節(jié)點(diǎn)。其中,所述"動(dòng)態(tài)是指"在運(yùn)行期間修改存儲(chǔ)節(jié)點(diǎn)列表,可以通過(guò)JMX方式實(shí)現(xiàn)。
圖4所示裝置中未詳述的部分可以參見(jiàn)圖3所示方法的相關(guān)部分,為了篇幅考慮,在此不再詳述。
實(shí)施例二
利用上述消息存儲(chǔ)方法及裝置,本發(fā)明還提供了一種消息處理系統(tǒng)。參照?qǐng)D5,是實(shí)施例二所述一種消息處理系統(tǒng)的結(jié)構(gòu)圖。所述系統(tǒng)包括
消息發(fā)布端U51,用于將消息發(fā)布到消息中間件U52;
消息中間件U52,用于將所述消息轉(zhuǎn)發(fā)給消息訂閱端U53;
消息訂閱端U53,用于從消息中間件U52接收消息;
數(shù)據(jù)庫(kù)U54,用于與消息中間件U52連接,存儲(chǔ)消息中間件轉(zhuǎn)發(fā)的消息。
所述消息訂閱端U53可以訂閱自己感興趣的消息,所述消息中間件U52將消息發(fā)布端U51發(fā)布的消息異步地傳送給該消息主題的訂閱端U53。其中,所述消息中間件U52上設(shè)置了圖4所示的消息存儲(chǔ)裝置,用于完成消息的多節(jié)點(diǎn)存儲(chǔ)。
在電子交易中的應(yīng)用,每筆交易會(huì)經(jīng)歷多個(gè)處理狀態(tài),而每個(gè)交易的每個(gè)狀態(tài)的變更都會(huì)產(chǎn)生一條消息,因此消息量非常大。這些消息由消息發(fā)布端U51發(fā)布到消息中間件U52,再由消息中間件U52傳送給消息訂閱端U53。
10如果消息量增大,就需要配置多個(gè)數(shù)據(jù)庫(kù)U54來(lái)分擔(dān)存儲(chǔ)壓力。
下面詳細(xì)說(shuō)明消息中間件U52的處理。
參照?qǐng)D6,是消息添加流程圖。
S601,從消息發(fā)布端接收消息添加請(qǐng)求;
S602,從預(yù)置的數(shù)據(jù)庫(kù)列表中以輪詢(xún)或隨機(jī)的方式選擇一個(gè)數(shù)據(jù)庫(kù);
5603, 將該消息發(fā)送給所選擇的數(shù)據(jù)庫(kù),存儲(chǔ)該消息內(nèi)容;
5604, 存儲(chǔ)該消息的數(shù)據(jù)庫(kù)向消息中間件返回保存成功的消息;
5605, 將存儲(chǔ)該消息的數(shù)據(jù)庫(kù)信息保存到消息的元數(shù)據(jù)中; 所述元數(shù)據(jù)是保存在消息中間件應(yīng)用服務(wù)器內(nèi)存的任務(wù)隊(duì)列中,每個(gè)消息
對(duì)應(yīng)一個(gè)元數(shù)據(jù),元數(shù)據(jù)中存有消息標(biāo)識(shí)信息。如果把存儲(chǔ)該消息的數(shù)據(jù)庫(kù)信 息也保存到對(duì)應(yīng)該消息的元數(shù)據(jù)中,即建立了消息與存儲(chǔ)該消息的數(shù)據(jù)庫(kù)之間 的映射關(guān)系。當(dāng)消息中間件轉(zhuǎn)發(fā)消息時(shí),通過(guò)從任務(wù)隊(duì)列查找消息元數(shù)據(jù)并從 中讀取數(shù)據(jù)庫(kù)信息,就可以找到存儲(chǔ)該消息的是哪個(gè)數(shù)據(jù)庫(kù)。其中,所述數(shù)據(jù)
庫(kù)信息是指數(shù)據(jù)庫(kù)的描述信息,包括數(shù)據(jù)庫(kù)ID、數(shù)據(jù)庫(kù)地址等信息。
5606, 消息中間件向消息發(fā)布端返回消息添加成功。 參照?qǐng)D7,是消息獲取流程圖。
S701 ,消息中間件從消息元數(shù)據(jù)中讀取保存該消息的數(shù)據(jù)庫(kù)信息;
5702, 消息中間件根據(jù)所述數(shù)據(jù)庫(kù)信息,從相應(yīng)的數(shù)據(jù)庫(kù)中獲取該消息內(nèi)
容;
5703, 存儲(chǔ)該消息的數(shù)據(jù)庫(kù)向消息中間件返回消息內(nèi)容。 消息中間件獲得消息內(nèi)容后,就可以將該消息發(fā)送給消息訂閱端。 參照?qǐng)D8 ,是消息刪除流程圖。
5801, 消息中間件從消息元數(shù)據(jù)中讀取保存該消息的數(shù)據(jù)庫(kù)信息;
5802, 消息中間件根據(jù)所述數(shù)據(jù)庫(kù)信息,從相應(yīng)的數(shù)據(jù)庫(kù)中刪除該消息內(nèi)
答;
5803, 存儲(chǔ)該消息的數(shù)據(jù)庫(kù)向消息中間件返回刪除成功。
優(yōu)選的,所述系統(tǒng)還可以動(dòng)態(tài)調(diào)整數(shù)據(jù)庫(kù)的數(shù)量,所述動(dòng)態(tài)是指在運(yùn)行過(guò) 程中增加或減少數(shù)據(jù)庫(kù)的數(shù)量。如果新增數(shù)據(jù)庫(kù),則通過(guò)JMX方式在數(shù)據(jù)庫(kù) 列表中新增數(shù)據(jù)庫(kù)信息,這樣可以使消息中間件新接收的消息能夠使用新增的數(shù)據(jù)庫(kù);如果刪除數(shù)據(jù)庫(kù),也是通過(guò)JMX方式刪除數(shù)據(jù)庫(kù)列表中該數(shù)據(jù)庫(kù)的 信息,這樣可以使消息中間件不再使用該數(shù)據(jù)庫(kù)存儲(chǔ)消息。
基于以上內(nèi)容,參照?qǐng)D9,是消息中間件U52的內(nèi)部結(jié)構(gòu)圖。消息中間件 具體包括
消息接收單元U91 ,用于從消息發(fā)布端U51接收消息添加請(qǐng)求; 數(shù)據(jù)庫(kù)選擇單元U92,用于從預(yù)置的數(shù)據(jù)庫(kù)列表中選擇一個(gè)數(shù)據(jù)庫(kù)U54 來(lái)存儲(chǔ)該消息;
映射關(guān)系保存單元U93 ,用于將該消息與存儲(chǔ)該消息的數(shù)據(jù)庫(kù)之間的映射 關(guān)系進(jìn)行保存。
其中,所述映射關(guān)系保存單元為元數(shù)據(jù),每個(gè)消息對(duì)應(yīng)一個(gè)元數(shù)據(jù),所述 元數(shù)據(jù)中存有消息標(biāo)識(shí)信息,并將存儲(chǔ)該消息的數(shù)據(jù)的描述信息進(jìn)行保存;該 元數(shù)據(jù)中的消息標(biāo)識(shí)信息與數(shù)據(jù)庫(kù)的描述信息形成映射關(guān)系。
優(yōu)選的,所述消息中間件U52還包括
數(shù)據(jù)庫(kù)調(diào)整單元U94,用于通過(guò)動(dòng)態(tài)修改所述數(shù)據(jù)庫(kù)列表,增加或刪除數(shù) 據(jù)庫(kù);
消息獲取單元U95,用于根據(jù)消息與存儲(chǔ)該消息的數(shù)據(jù)庫(kù)之間的映射關(guān) 系,獲取消息并觸發(fā)發(fā)送或刪除操作。
圖9所示裝置中未詳述的部分可以參見(jiàn)圖6、 7、 8所示方法的相關(guān)部分, 為了篇幅考慮,在此不再詳述。
以上對(duì)本發(fā)明所提供的一種消息存儲(chǔ)方法、裝置及一種消息處理系統(tǒng),進(jìn)
對(duì)于本領(lǐng)域的一般技術(shù)人員,依據(jù)本發(fā)明的思想,在具體實(shí)施方式
及應(yīng)用范圍 上均會(huì)有改變之處。綜上所述,本說(shuō)明書(shū)內(nèi)容不應(yīng)理解為對(duì)本發(fā)明的限制。
權(quán)利要求
1、一種消息存儲(chǔ)方法,其特征在于,包括接收消息添加請(qǐng)求;從預(yù)置的存儲(chǔ)節(jié)點(diǎn)列表中選擇一個(gè)存儲(chǔ)節(jié)點(diǎn),存儲(chǔ)該消息;將該消息與存儲(chǔ)該消息的存儲(chǔ)節(jié)點(diǎn)之間的映射關(guān)系進(jìn)行保存。
2、 根據(jù)權(quán)利要求1所述的方法,其特征在于所述從預(yù)置的存儲(chǔ)節(jié)點(diǎn)列表中輪詢(xún)或隨機(jī)選擇一個(gè)存儲(chǔ)節(jié)點(diǎn)。
3、 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述將該消息與存儲(chǔ)該消息的存儲(chǔ)節(jié)點(diǎn)之間的映射關(guān)系進(jìn)行保存,具體包括每個(gè)消息對(duì)應(yīng) 一個(gè)元數(shù)據(jù),所述元數(shù)據(jù)中存有消息標(biāo)識(shí)信息;將存儲(chǔ)該消息的存儲(chǔ)節(jié)點(diǎn)的描述信息存儲(chǔ)在對(duì)應(yīng)該消息的元數(shù)據(jù)中,該元數(shù)據(jù)中的消息標(biāo)識(shí)信息與存儲(chǔ)節(jié)點(diǎn)的描述信息形成映射關(guān)系。
4、 根據(jù)權(quán)利要求1或3所述的方法,其特征在于,所述保存之后還包括根據(jù)消息與存儲(chǔ)該消息的存儲(chǔ)節(jié)點(diǎn)之間的映射關(guān)系,獲取消息并進(jìn)行發(fā)送或刪除操作。
5、 根據(jù)權(quán)利要求1所述的方法,其特征在于,還包括通過(guò)動(dòng)態(tài)修改所述存儲(chǔ)節(jié)點(diǎn)列表,增加或刪除存儲(chǔ)節(jié)點(diǎn)。
6、 根據(jù)權(quán)利要求5所述的方法,其特征在于,所述動(dòng)態(tài)修改具體包括通過(guò)JMX方式,在運(yùn)行過(guò)程中修改所述存儲(chǔ)節(jié)點(diǎn)列表。
7、 一種消息存儲(chǔ)裝置,其特征在于,包括一個(gè)或多個(gè)存儲(chǔ)節(jié)點(diǎn),每個(gè)存儲(chǔ)節(jié)點(diǎn)用于存儲(chǔ)消息;消息接收單元,用于接收消息添加請(qǐng)求;節(jié)點(diǎn)選擇單元,用于從預(yù)置的存儲(chǔ)節(jié)點(diǎn)列表中選擇一個(gè)存儲(chǔ)節(jié)點(diǎn)來(lái)存儲(chǔ)該消息;映射關(guān)系保存單元,用于將該消息與存儲(chǔ)該消息的存儲(chǔ)節(jié)點(diǎn)之間的映射關(guān)系進(jìn)行保存。
8、 根據(jù)權(quán)利要求7所述的裝置,其特征在于所述映射關(guān)系保存單元為元數(shù)據(jù),每個(gè)消息對(duì)應(yīng)一個(gè)元數(shù)據(jù),所述元數(shù)據(jù)中存有消息標(biāo)識(shí)信息,并將存儲(chǔ)該消息的存儲(chǔ)節(jié)點(diǎn)的描述信息進(jìn)行保存;該元數(shù)據(jù)中的消息標(biāo)識(shí)信息與存儲(chǔ)節(jié)點(diǎn)的描述信息形成映射關(guān)系。
9、 根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述裝置還包括消息獲取單元,用于根據(jù)消息與存儲(chǔ)該消息的存儲(chǔ)節(jié)點(diǎn)之間的映射關(guān)系, 獲取消息并觸發(fā)發(fā)送或刪除操作。
10、 根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述裝置還包括節(jié)點(diǎn)調(diào)整單元,用于通過(guò)動(dòng)態(tài)修改所述存儲(chǔ)節(jié)點(diǎn)列表,增加或刪除存儲(chǔ)節(jié)點(diǎn)。
11、 一種消息處理系統(tǒng),其特征在于,包括消息發(fā)布端,用于將消息發(fā)布到消息中間件;消息訂閱端,用于從消息中間件接收消息;一個(gè)或多個(gè)數(shù)據(jù)庫(kù),用于與消息中間件連接,存儲(chǔ)消息中間件轉(zhuǎn)發(fā)的消息;消息中間件,用于轉(zhuǎn)發(fā)消息,具體包括消息接收單元,用于從消息發(fā)布端接收消息添加請(qǐng)求;數(shù)據(jù)庫(kù)選擇單元,用于從預(yù)置的數(shù)據(jù)庫(kù)列表中選擇一個(gè)數(shù)據(jù)庫(kù)來(lái)存儲(chǔ)該消息;映射關(guān)系保存單元,用于將該消息與存儲(chǔ)該消息的數(shù)據(jù)庫(kù)之間的映射關(guān)系進(jìn)行保存。
12、 根據(jù)權(quán)利要求11所述的系統(tǒng),其特征在于,所述消息中間件還包括數(shù)據(jù)庫(kù)調(diào)整單元,用于通過(guò)動(dòng)態(tài)修改所述數(shù)據(jù)庫(kù)列表,增加或刪除數(shù)據(jù)庫(kù)。
全文摘要
本發(fā)明公開(kāi)了一種消息存儲(chǔ)方法及裝置,以解決現(xiàn)有技術(shù)中采用單節(jié)點(diǎn)存儲(chǔ)所存在的問(wèn)題。所述方法包括接收消息添加請(qǐng)求;從預(yù)置的存儲(chǔ)節(jié)點(diǎn)列表中選擇一個(gè)存儲(chǔ)節(jié)點(diǎn),存儲(chǔ)該消息;將該消息與存儲(chǔ)該消息的存儲(chǔ)節(jié)點(diǎn)之間的映射關(guān)系進(jìn)行保存。所述方案能夠避免兩個(gè)問(wèn)題第一,如果其中一個(gè)存儲(chǔ)節(jié)點(diǎn)出現(xiàn)了問(wèn)題,還可以將消息存儲(chǔ)到其他節(jié)點(diǎn)上,因此不會(huì)造成消息中間件不能正常工作;第二,如果消息流量很大,多個(gè)存儲(chǔ)節(jié)點(diǎn)可以分散存儲(chǔ)上的壓力。本發(fā)明還提供了一種消息處理系統(tǒng),以解決單節(jié)點(diǎn)存儲(chǔ)待轉(zhuǎn)發(fā)的消息容易造成系統(tǒng)瓶頸或處理中斷的問(wèn)題。
文檔編號(hào)H04L12/58GK101674257SQ200810210199
公開(kāi)日2010年3月17日 申請(qǐng)日期2008年9月10日 優(yōu)先權(quán)日2008年9月10日
發(fā)明者曾憲杰 申請(qǐng)人:阿里巴巴集團(tuán)控股有限公司