消息傳遞方法、系統(tǒng)和消息中間件系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及數(shù)據(jù)傳輸技術(shù)領(lǐng)域,特別是涉及一種消息傳遞方法、系統(tǒng)和消息中間 件系統(tǒng)。
【背景技術(shù)】
[0002] 由于廣泛的存在跨應(yīng)用的消息的傳遞和消費(fèi),在過去一段時(shí)間,我們使用輪詢來 解決這些問題,但是消息的及時(shí)性無法得到保證,而且存在大量的冗余設(shè)計(jì),以致影響生產(chǎn) 者的"業(yè)務(wù)主體性能"。
[0003] 從框架建設(shè)角度來說,跨應(yīng)用的消息的傳遞需要大量的信號通知和消息驅(qū)動來協(xié) 調(diào)各個(gè)應(yīng)用和環(huán)節(jié)。如果沒有引入數(shù)據(jù)和事件驅(qū)動的概念,就無法從繁雜的業(yè)務(wù)和不斷重 疊的邏輯修改中解脫出來,完成實(shí)時(shí)準(zhǔn)確的業(yè)務(wù)交付。在業(yè)界,開源社區(qū)和各大公司也有類 似的中間件產(chǎn)品,比如騰訊tube,阿里的rocketmq,開源的1^€1^,瓜1313;[1:11^等。1:油6、1^伐& 能夠照顧到海量的消息傳輸?shù)膱鼍?,但是對于業(yè)務(wù)事務(wù)型要求很高的場景不能滿足,而 Rocketmq和rabbi tmq的場景在事務(wù)上有比較豐富的支持,但是對于并發(fā)的需求和順序的要 求滿足的不是很好。
[0004]因此,現(xiàn)有的中間件產(chǎn)品不能滿足多樣性場景的需求。
【發(fā)明內(nèi)容】
[0005] 基于此,有必要提供一種能滿足多樣性場景需求的消息傳遞方法、系統(tǒng)和消息中 間件系統(tǒng)。
[0006] -種消息傳遞方法,包括:
[0007] 接收消息生產(chǎn)端輸入的特性參數(shù),并根據(jù)特征參數(shù)選擇匹配中間件生成消息;消 息包括消息體,消息體包括與匹配中間件對應(yīng)的標(biāo)識;
[0008] 根據(jù)消息體的標(biāo)識,查找與匹配中間件對應(yīng)的通道,并將消息存儲在通道中;
[0009] 根據(jù)通道確定與通道對應(yīng)的路由路徑,將消息路由至與通道對應(yīng)的隊(duì)列中;
[0010] 接收消息消費(fèi)端的消費(fèi)請求,查找與消費(fèi)端對應(yīng)的隊(duì)列,根據(jù)消費(fèi)請求將對應(yīng)的 隊(duì)列中的消息發(fā)送給消息消費(fèi)端。
[0011] 在其中一種實(shí)施方式中,根據(jù)消息體的標(biāo)識,查找與匹配中間件對應(yīng)的通道,并將 消息存儲在通道中的步驟,包括:
[0012] 獲取通道的元數(shù)據(jù),查找與消息體的標(biāo)識對應(yīng)的元數(shù)據(jù)并確定元數(shù)據(jù)對應(yīng)的通 道;
[0013] 將消息存儲在通道中。
[0014] 在其中一種實(shí)施方式中,根據(jù)通道確定與通道對應(yīng)的路由路徑,將消息路由至與 通道對應(yīng)的隊(duì)列中的步驟,包括:
[0015] 獲取隊(duì)列的元數(shù)據(jù),查找與通道的元數(shù)據(jù)對應(yīng)的隊(duì)列的元數(shù)據(jù)并確定通道對應(yīng)的 隊(duì)列;
[0016] 將消息路由至隊(duì)列中。
[0017] 在其中一種實(shí)施方式中,特征參數(shù)包括:消息是否支持事務(wù)性,消息是否支持順序 性,消息是否需要重新添加到隊(duì)列,消息是否需要設(shè)置過期時(shí)間、消息是否需要死信隊(duì)列, 消息是否需要用戶域管理以及消息是否有數(shù)據(jù)的流量需求的任意一項(xiàng)或多項(xiàng)。
[0018] 一種消息傳遞系統(tǒng),包括:
[0019] 消息生成模塊,用于接收消息生產(chǎn)端輸入的特性參數(shù),并根據(jù)特征參數(shù)選擇匹配 中間件生成消息;消息包括消息體,消息體包括與匹配中間件對應(yīng)的標(biāo)識;
[0020] 存儲模塊,用于根據(jù)消息體的標(biāo)識,查找與匹配中間件對應(yīng)的通道,并將消息存儲 在通道中;
[0021] 路由模塊,用于根據(jù)通道確定與通道對應(yīng)的路由路徑,將消息路由至與通道對應(yīng) 的隊(duì)列中;
[0022] 消息發(fā)送模塊,用于接收消息消費(fèi)端的消費(fèi)請求,查找與消費(fèi)端對應(yīng)的隊(duì)列,根據(jù) 消費(fèi)請求將對應(yīng)的隊(duì)列中的消息發(fā)送給消息消費(fèi)端。
[0023] 在其中一種實(shí)施方式中,存儲模塊包括:
[0024] 第一查找單元,用于獲取通道的元數(shù)據(jù),查找與消息體的標(biāo)識對應(yīng)的元數(shù)據(jù)并確 定元數(shù)據(jù)對應(yīng)的通道,
[0025] 存儲單元,用于將消息存儲在通道中。
[0026] 在其中一種實(shí)施方式中,路由模塊包括:
[0027] 第二查找單元,用于獲取隊(duì)列的元數(shù)據(jù),查找與通道的元數(shù)據(jù)對應(yīng)的隊(duì)列的元數(shù) 據(jù)并確定通道對應(yīng)的隊(duì)列;
[0028] 路由單元,用于將消息路由至隊(duì)列中。
[0029] 在其中一種實(shí)施方式中,特征參數(shù)包括:消息是否支持事務(wù)性,消息是否支持順序 性,消息是否需要重新添加到隊(duì)列,消息是否需要設(shè)置過期時(shí)間、消息是否需要死信隊(duì)列, 消息是否需要用戶域管理以及消息是否有數(shù)據(jù)的流量需求的任意一項(xiàng)或多項(xiàng)。
[0030] -種消息中間件系統(tǒng),包括:多個(gè)類型的中間件、與每個(gè)中間件對應(yīng)的多個(gè)通道以 及與每個(gè)通道對應(yīng)的多個(gè)隊(duì)列;
[0031 ]中間件,用于根據(jù)與其匹配的特性參數(shù)生成消息,消息包括消息體,消息體包括與 匹配中間件對應(yīng)的標(biāo)識;
[0032] 通道,用于根據(jù)消息體的標(biāo)識,存儲對應(yīng)的中間件生成的消息;
[0033] 隊(duì)列,用于路由與其對應(yīng)通道的消息
[0034] 在其中一種實(shí)施方式中,特征參數(shù)包括:消息是否支持事務(wù)性,消息是否支持順序 性,消息是否需要重新添加到隊(duì)列,消息是否需要設(shè)置過期時(shí)間、消息是否需要死信隊(duì)列, 消息是否需要用戶域管理以及消息是否有數(shù)據(jù)的流量需求的任意一項(xiàng)或多項(xiàng);中間件包括 kafka、rabb i tmq和Rocketmq 〇
[0035] 該消息傳遞方法,通道對面消息生產(chǎn)端,隊(duì)列面對消息消費(fèi)端,通道與隊(duì)列預(yù)先建 立對應(yīng)關(guān)系。當(dāng)消息生產(chǎn)端需要產(chǎn)生消息時(shí),根據(jù)輸入的特征參數(shù)選擇匹配中間件生成消 息并存儲在該匹配中間件對應(yīng)的通道中,根據(jù)通道確定與通道對應(yīng)的路由路徑,將消息路 由至通道對應(yīng)的隊(duì)列中,當(dāng)接收到消費(fèi)端的消費(fèi)請求時(shí),查找與消費(fèi)端對應(yīng)的隊(duì)列,根據(jù)消 費(fèi)請求將對應(yīng)的隊(duì)列中的消息發(fā)送給消息消費(fèi)端。該消息傳遞方法,能夠根據(jù)消息生產(chǎn)端 輸入的特征參數(shù)選擇匹配的中間件生成消息,支持多種類型的消息中間件,因此,能夠滿足 多種業(yè)務(wù)場景的需求。
【附圖說明】
[0036]圖1為一種實(shí)施方式的消息傳遞方法的流程圖;
[0037]圖2為一種實(shí)施方式的消息傳遞方法的原理圖;
[0038] 圖3為一種實(shí)施方式的將消息存儲在通道的方法的流程圖;
[0039] 圖4為一種實(shí)施方式的將消息路由至隊(duì)列的方法的流程圖;
[0040] 圖5為一種實(shí)施方式的消息傳遞系統(tǒng)的功能模塊示意圖。
【具體實(shí)施方式】
[0041 ] 如圖1和圖2所示,一種消息傳遞方法,包括以下步驟:
[0042] S10:接收消息生產(chǎn)端輸入的特性參數(shù),并根據(jù)特征參數(shù)選擇匹配中間件生成消 息。
[0043] 消息生產(chǎn)端是指消息生產(chǎn)者所在的用戶端,消息生產(chǎn)者是指消息數(shù)據(jù)的源頭,消 息數(shù)據(jù)的生產(chǎn)方。消息生產(chǎn)者通過平臺輸入與消息相關(guān)的特征參數(shù),根據(jù)特征參數(shù)選擇匹 配的中間件生成消息。
[0044] 消息包括消息體,消息體是各類型中間件消息的head/body所支持特性上取并集, 在數(shù)據(jù)壓縮方面采用protobuf的方式編碼傳輸。消息體包括與匹配中間件對應(yīng)的標(biāo)識。
[0045] S30:根據(jù)消息體的標(biāo)識,查找與匹配中間件對應(yīng)的通道,并將消息存儲在通道中。
[0046] 通道(Channel)面向消息生產(chǎn)者,是消息數(shù)據(jù)的一個(gè)存儲管道。每種中間件包括多 個(gè)通道,生成消息后,根據(jù)其消息體的標(biāo)識,查找與該標(biāo)識對應(yīng)的通道,將消息存儲在該通 道中。
[0047] S50:根據(jù)通道確定與通道對應(yīng)的路由路徑,將消息路由至與通道對應(yīng)的隊(duì)列中。 [0048]隊(duì)列(Queue)面向消息消費(fèi)者,是消息數(shù)據(jù)路由后的隊(duì)列,一個(gè)通道(Channe 1)可 與多個(gè)隊(duì)列(Queue)對應(yīng),因此,一個(gè)通道(Channel)的消息可以發(fā)往多個(gè)隊(duì)列(Queue),一 個(gè)隊(duì)列(Queue)可以消息多個(gè)通道(Channe 1)的消息。
[0049] S70:接收消息消費(fèi)端的消費(fèi)請求,查找與消費(fèi)端對應(yīng)的隊(duì)列,根據(jù)消費(fèi)請求將對 應(yīng)的隊(duì)列中的消息發(fā)送給消息消費(fèi)端。
[0050] 隊(duì)列(Queue)面向消費(fèi)者,消息消費(fèi)端與隊(duì)列預(yù)先對應(yīng),當(dāng)接收到消息消費(fèi)端的消 費(fèi)請求時(shí),查找與消費(fèi)端對應(yīng)的隊(duì)列,根據(jù)消費(fèi)請求將對應(yīng)的隊(duì)列中的消息發(fā)送給消息消 費(fèi)端。
[0051] 該消息傳遞方法,通道對面消息生產(chǎn)端,隊(duì)列面對消息消費(fèi)端,通道與隊(duì)列預(yù)先建 立對應(yīng)關(guān)系。當(dāng)消息生產(chǎn)端需要產(chǎn)生消息時(shí),根據(jù)輸入的特征參數(shù)選擇匹配中間件生成消 息并存儲在該匹配中間件對應(yīng)的通道中,根據(jù)通道確定與通道對應(yīng)的路由路徑,將消息路 由至通道對應(yīng)的隊(duì)列中,當(dāng)接收到消費(fèi)端的消費(fèi)請求時(shí),查找與消費(fèi)端對應(yīng)的隊(duì)列,根據(jù)消 費(fèi)請求將對應(yīng)的隊(duì)列中的消息發(fā)送給消息消費(fèi)端。該消息傳遞方法,能夠根據(jù)消息生產(chǎn)端 輸入的特征參數(shù)選擇匹配的中間件生成消息,支持多種類型的消息中間件,因此,能夠滿足 多種業(yè)務(wù)場景的需求,且消息生產(chǎn)端不關(guān)心消息數(shù)據(jù)會最終到達(dá)哪里,何時(shí)數(shù)據(jù)會被拿走, 消費(fèi)者拿取消息數(shù)據(jù)時(shí)不關(guān)心數(shù)據(jù)本身,直接從與其對應(yīng)的隊(duì)列中獲取消費(fèi)消息。
[0052] 在另一種實(shí)施方式中,中間件包括kafka、rabbitmq和Rocketmq等多種方式。Kafka 對消息的并發(fā)比較大的場景支持的比較好,Rabb i tmq對消息的事務(wù)場景支持的比較好。 [0053]在另一種實(shí)施方式中,特征參數(shù)包括:消息是否支持事務(wù)性,消息是否支持順序 性,消息是否需要重新添加到隊(duì)列,消息是否需要設(shè)置過期時(shí)間、消息是否需要死信隊(duì)列, 消息是否需要用戶域管理以及消息是否有數(shù)據(jù)的流量需求的任意一項(xiàng)或多項(xiàng)。
[0054] 用戶根據(jù)需求輸入消息的特征參數(shù),自動選擇匹配的中間件類型,例如,若消息特 征參數(shù)為支持事務(wù)性,將匹配Rocketmq或rabbitmq中間件。
[0055] 根據(jù)用戶輸入的特征參數(shù)選擇匹配的中間件類型生成消息,將消息存儲在與該匹 配的中間件對應(yīng)