本發(fā)明涉及通信領(lǐng)域,具體而言,涉及一種訂閱消息的發(fā)布方法及裝置。
背景技術(shù):
相關(guān)技術(shù)中,對(duì)于一個(gè)大型的分布式軟件系統(tǒng)來(lái)說(shuō),會(huì)有很多服務(wù),或由很多功能模塊組成。這些服務(wù)之間就會(huì)存在相互交換信息的需求。通信組件需要完成的就是不同服務(wù)之間的信息傳遞需求。但是如果僅僅完成信息的傳遞,還遠(yuǎn)無(wú)法達(dá)到一個(gè)高效可擴(kuò)展系統(tǒng)的要求。通常會(huì)有很多問(wèn)題需要解決,例如,如何盡可能降低發(fā)送者和接收者之間的耦合度、如何做到有效的負(fù)荷均衡、如何新增一個(gè)服務(wù)不影響原先運(yùn)行的服務(wù)。
相關(guān)技術(shù)中,基于發(fā)布/訂閱機(jī)制的消息隊(duì)列中間件為以異步方式實(shí)現(xiàn)構(gòu)造的分布式應(yīng)用提供了一種松耦合方法。它簡(jiǎn)化應(yīng)用之間數(shù)據(jù)的傳輸,屏蔽底層異構(gòu)操作系統(tǒng)和網(wǎng)絡(luò)平臺(tái),提供了一致的通信標(biāo)準(zhǔn)和應(yīng)用開(kāi)發(fā),確保分布式計(jì)算網(wǎng)絡(luò)環(huán)境下可靠的、跨平臺(tái)的信息傳輸和數(shù)據(jù)交換。
同時(shí),相關(guān)技術(shù)中的消息發(fā)布訂閱系統(tǒng)都存在如下的問(wèn)題:
1、標(biāo)準(zhǔn)的c/s架構(gòu),所有消息發(fā)布方都需要先將消息發(fā)往服務(wù)器,由服務(wù)器再投遞給消息的接收方。對(duì)于一個(gè)有若干消息交互的業(yè)務(wù)流程,最終體現(xiàn)出時(shí)延大的缺點(diǎn)。
2、服務(wù)器在投遞消息的時(shí)候路由關(guān)系都是由客戶端通知服務(wù)器生成的,第三方很難進(jìn)行修改。某些場(chǎng)景需要修改報(bào)文的投遞路徑時(shí),除非升級(jí)客戶端程序來(lái)重新生成路由關(guān)系,否則無(wú)所適從,大大限制了用戶的使用場(chǎng)景。
3、服務(wù)器在進(jìn)行報(bào)文投遞時(shí),匹配算法也是簡(jiǎn)單通過(guò)發(fā)布方的發(fā)布關(guān)鍵字和接收方的接收關(guān)鍵字進(jìn)行模糊匹配,缺乏更有效的基于業(yè)務(wù)數(shù)據(jù)自定義消息投遞路徑的支撐。
針對(duì)相關(guān)技術(shù)中存在的上述問(wèn)題,目前尚未發(fā)現(xiàn)有效的解決方法。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明提供了一種訂閱消息的發(fā)布方法及裝置,以至少解決相關(guān)技術(shù)中在發(fā)送訂閱消息時(shí)使用服務(wù)器進(jìn)行中轉(zhuǎn)而導(dǎo)致時(shí)延過(guò)大的問(wèn)題。
根據(jù)本發(fā)明的一個(gè)方面,提供了一種訂閱消息的發(fā)布方法,包括:接收消息發(fā)送方發(fā)送的用于發(fā)送訂閱消息的請(qǐng)求消息;指示所述消息發(fā)送方將所述訂閱消息直接發(fā)布給訂閱方。
進(jìn)一步地,所述指示所述消息發(fā)送方將所述訂閱消息直接發(fā)布給訂閱方包括:根據(jù)預(yù)存訂閱信息查找所述訂閱消息的訂閱方和發(fā)送所述訂閱消息的路由路徑;指示所述消息發(fā)送方將所述訂閱消息通過(guò)所述路由路徑直接發(fā)布給所述訂閱方。
進(jìn)一步地,在根據(jù)預(yù)存訂閱信息查找所述訂閱消息的訂閱方和發(fā)送所述訂閱消息的路由路徑之前,所述方法還包括:接收一個(gè)或多個(gè)所述訂閱方發(fā)送的訂閱信息,其中,所述訂閱信息包括以下至少之一:所述訂閱方需要接收的訂閱消息、所述訂閱方接收訂閱消息的路由路徑;保存所述訂閱信息作為所述預(yù)存訂閱信息。
進(jìn)一步地,在所述根據(jù)預(yù)存訂閱信息查找所述訂閱消息的訂閱方和發(fā)送所述訂閱消息的路由路徑之后,所述方法還包括:接收用于修改所述訂閱方和/或修改所述路由路徑的第一請(qǐng)求消息;根據(jù)所述第一請(qǐng)求消息修改所述訂閱方得到指定訂閱方和/或修改所述路由路徑得到指定路由路徑。將所述指定訂閱方和所述定路由路徑確定為所述訂閱消息的接收方和/或發(fā)布所述訂閱消息的路由路徑。
進(jìn)一步地,在所述指示所述消息發(fā)送方將所述訂閱消息直接發(fā)布給訂閱方之前,所述方法還包括:接收用于增加訂閱所述訂閱消息的第二請(qǐng)求消息;根據(jù)所述第二請(qǐng)求增加接收所述訂閱消息的指定訂閱方;指示所述消息發(fā)送方將所述訂閱消息發(fā)布給增加的所述指定訂閱方。
進(jìn)一步地,在所述根據(jù)所述第二請(qǐng)求增加接收所述訂閱消息的指定訂閱方之后,所述方法還包括:判斷所述第二請(qǐng)求是否指示對(duì)所述訂閱消息進(jìn)行分流后發(fā)送給所述訂閱方和所述指定訂閱方;在判斷結(jié)果為是時(shí),將所述訂閱消息根據(jù)所述第二請(qǐng)求指示的權(quán)重值信息分流后發(fā)布給所述訂閱方和所述指定訂閱方。
進(jìn)一步地,接收通過(guò)命令行界面cli或web客戶端發(fā)送的所述第一請(qǐng)求消息和/或所述第二請(qǐng)求消息。
根據(jù)本發(fā)明的另一方面,提供了一種訂閱消息的發(fā)布裝置,包括:第一接收模塊,用于接收消息發(fā)送方發(fā)送的用于發(fā)送訂閱消息的請(qǐng)求消息;第一指示模塊,用于指示所述消息發(fā)送方將所述訂閱消息直接發(fā)布給訂閱方。
進(jìn)一步地,所述第一指示模塊包括:查找單元,用于根據(jù)預(yù)存訂閱信息查找所述訂閱消息的訂閱方和發(fā)送所述訂閱消息的路由路徑;指示單元,用于指示所述消息發(fā)送方將所述訂閱消息通過(guò)所述路由路徑直接發(fā)布給所述訂閱方。
進(jìn)一步地,所述第一指示模塊還包括:第一接收單元,用于在所述查找單元根據(jù)預(yù)存訂閱信息查找所述訂閱消息的訂閱方和發(fā)送所述訂閱消息的路由路徑之前,接收一個(gè)或多個(gè)所述訂閱方發(fā)送的訂閱信息,其中,所述訂閱信息包括以下至少之一:所述訂閱方需要接收的訂閱消息、所述訂閱方接收訂閱消息的路由路徑;保存單元,用于保存所述訂閱信息作為所述預(yù)存訂閱信息。
進(jìn)一步地,所述第一指示模塊還包括:第二接收單元,用于在所述查找單元根據(jù)預(yù)存訂閱信息查找所述訂閱消息的訂閱方和發(fā)送所述訂閱消息的路由路徑之后,接收用于修改所述訂閱方和/或修改所述路由路徑的第一請(qǐng)求消息;修改單元,用于根據(jù)所述第一請(qǐng)求消息修改所述訂閱方得到指定訂閱方和/或修改所述路由路徑得到指定路由路徑。確定單元,用于將所述指定訂閱方和所述定路由路徑確定為所述訂閱消息的接收方和/或發(fā)布所述訂閱消息的路由路徑。
進(jìn)一步地,所述裝置還包括:第二接收模塊,用于在所述指示模塊指示所述消息發(fā)送方將所述訂閱消息直接發(fā)布給訂閱方之前,接收用于增加訂閱所述訂閱消息的第二請(qǐng)求消息;增加模塊,用于根據(jù)所述第二請(qǐng)求增加接收所述訂閱消息的指定訂閱方;第二指示模塊,用于指示所述消息發(fā)送方將所述訂閱消息發(fā)布給增加的所述指定訂閱方。
進(jìn)一步地,所述裝置還包括:判斷模塊,用于在所述增加模塊根據(jù)所述第二請(qǐng)求增加接收所述訂閱消息的指定訂閱方之后,判斷所述第二請(qǐng)求是否指示對(duì)所述訂閱消息進(jìn)行分流后發(fā)送給所述訂閱方和所述指定訂閱方;分流模塊,用于在判斷結(jié)果為是時(shí),將所述訂閱消息根據(jù)所述第二請(qǐng)求指示的權(quán)重值信息分流后發(fā)布給所述訂閱方和所述指定訂閱方。
通過(guò)本發(fā)明,采用首先接收消息發(fā)送方發(fā)送的用于發(fā)送訂閱消息的請(qǐng)求消息,然后指示所述消息發(fā)送方將所述訂閱消息直接發(fā)布給訂閱方。通過(guò)指示訂閱消息的發(fā)送方直接將訂閱消息發(fā)送給訂閱方,而不通過(guò)中間件進(jìn)行集中分發(fā),解決了相關(guān)技術(shù)中在發(fā)送訂閱消息時(shí)使用服務(wù)器進(jìn)行中轉(zhuǎn)而導(dǎo)致時(shí)延過(guò)大的問(wèn)題,進(jìn)而達(dá)到了縮短訂閱消息的發(fā)送時(shí)延的效果。
附圖說(shuō)明
此處所說(shuō)明的附圖用來(lái)提供對(duì)本發(fā)明的進(jìn)一步理解,構(gòu)成本申請(qǐng)的一部分,本發(fā)明的示意性實(shí)施例及其說(shuō)明用于解釋本發(fā)明,并不構(gòu)成對(duì)本發(fā)明的不當(dāng)限定。在附圖中:
圖1是根據(jù)本發(fā)明實(shí)施例的訂閱消息的發(fā)布方法的流程圖;
圖2是根據(jù)本發(fā)明實(shí)施例的訂閱消息的訂閱示意圖;
圖3是根據(jù)本發(fā)明實(shí)施例的訂閱消息的訂閱流程圖;
圖4是根據(jù)本發(fā)明實(shí)施例的訂閱消息的發(fā)布示意圖;
圖5是根據(jù)本發(fā)明實(shí)施例的訂閱消息的發(fā)布流程圖;
圖6是根據(jù)本發(fā)明實(shí)施例的取消訂閱的示意圖;
圖7是根據(jù)本發(fā)明實(shí)施例的取消訂閱流程圖;
圖8是根據(jù)本發(fā)明實(shí)施例的修改消息路由路徑示意圖;
圖9是根據(jù)本發(fā)明實(shí)施例的修改路由路徑的流程圖;
圖10是根據(jù)本發(fā)明實(shí)施例的訂閱消息發(fā)布裝置的結(jié)構(gòu)框圖;
圖11是根據(jù)本發(fā)明實(shí)施例的訂閱消息發(fā)布裝置的可選結(jié)構(gòu)框圖一;
圖12是根據(jù)本發(fā)明實(shí)施例的訂閱消息發(fā)布裝置的可選結(jié)構(gòu)框圖二;
圖13是根據(jù)本發(fā)明實(shí)施例的訂閱消息發(fā)布裝置的可選結(jié)構(gòu)框圖三;
圖14是根據(jù)本發(fā)明實(shí)施例的訂閱消息發(fā)布裝置的可選結(jié)構(gòu)框圖四;
圖15是根據(jù)本發(fā)明實(shí)施例的訂閱消息發(fā)布裝置的可選結(jié)構(gòu)框圖五。
具體實(shí)施方式
下文中將參考附圖并結(jié)合實(shí)施例來(lái)詳細(xì)說(shuō)明本發(fā)明。需要說(shuō)明的是,在不沖突的情況下,本申請(qǐng)中的實(shí)施例及實(shí)施例中的特征可以相互組合。
需要說(shuō)明的是,本發(fā)明的說(shuō)明書(shū)和權(quán)利要求書(shū)及上述附圖中的術(shù)語(yǔ)“第一”、“第二”等是用于區(qū)別類似的對(duì)象,而不必用于描述特定的順序或先后次序。
在本實(shí)施例中提供了一種訂閱消息的發(fā)布方法,該方法可應(yīng)用在消息發(fā)布訂閱系統(tǒng)中,也可應(yīng)用在可以發(fā)送消息的服務(wù)器,中轉(zhuǎn)設(shè)備、控制設(shè)備中。圖1是根據(jù)本發(fā)明實(shí)施例的訂閱消息的發(fā)布方法的流程圖,如圖1所示,該流程包括如下步驟:
步驟s102,接收消息發(fā)送方發(fā)送的用于發(fā)送訂閱消息的請(qǐng)求消息;
步驟s104,指示消息發(fā)送方將訂閱消息直接發(fā)布給訂閱方。
通過(guò)本實(shí)施例,采用首先接收消息發(fā)送方發(fā)送的用于發(fā)送訂閱消息的請(qǐng)求消息,然后指示消息發(fā)送方將訂閱消息直接發(fā)布給訂閱方。通過(guò)指示訂閱消息的發(fā)送方直接將訂閱消息發(fā)送給訂閱方,而不通過(guò)中間件進(jìn)行集中分發(fā),解決了相關(guān)技術(shù)中在發(fā)送訂閱消息時(shí)使用服務(wù)器進(jìn)行中轉(zhuǎn)而導(dǎo)致時(shí)延過(guò)大的問(wèn)題,進(jìn)而達(dá)到了縮短訂閱消息的發(fā)送時(shí)延的效果。
在根據(jù)本實(shí)施例的可選實(shí)施方式中,還可以確定訂閱消息的訂閱方和訂閱消息的發(fā)送方直接發(fā)送訂閱消息的的路由路徑,在具體的確定過(guò)程中,可以包括多種不同的確定方法,其中,可以根據(jù)預(yù)存的訂閱信息進(jìn)行確定,包括:
s11,根據(jù)預(yù)存訂閱信息查找訂閱消息的訂閱方和發(fā)送訂閱消息的路由路徑;
s12,指示消息發(fā)送方將訂閱消息通過(guò)路由路徑直接發(fā)布給訂閱方。
可選的,還包括確定和保存上述預(yù)存訂閱消息,在根據(jù)預(yù)存訂閱信息查找訂閱消息的訂閱方和發(fā)送訂閱消息的路由路徑之前,方法還包括:
s1,接收一個(gè)或多個(gè)訂閱方發(fā)送的訂閱信息,其中,訂閱信息包括以下至少之一:訂閱方需要接收的訂閱消息、訂閱方接收訂閱消息的路由路徑;
s2,保存訂閱信息作為預(yù)存訂閱信息。
可選的,圖2是根據(jù)本發(fā)明實(shí)施例的訂閱消息的訂閱示意圖,如圖2所示,其中,servicea為訂閱消息的訂閱方,數(shù)據(jù)庫(kù)服務(wù)器為保存訂閱信息的數(shù)據(jù)庫(kù)服務(wù)器,圖3是根據(jù)本發(fā)明實(shí)施例的訂閱消息的訂閱流程圖,如圖3所示,包括:
s301,訂閱方通過(guò)數(shù)據(jù)庫(kù)客戶端與數(shù)據(jù)庫(kù)服務(wù)器建立鏈接;
s302,服務(wù)進(jìn)行訂閱操作,訂閱操作中攜帶關(guān)鍵字標(biāo)識(shí)key1;
s303,在數(shù)據(jù)庫(kù)中增加一條索引sub記錄,記錄為key-value(重要索引)形式,其中sub攜帶的key1作為關(guān)鍵字,包括服務(wù)標(biāo)識(shí)和ip。關(guān)鍵字key1用來(lái)表征訂閱方標(biāo)識(shí)和路由路徑。
圖4是根據(jù)本發(fā)明實(shí)施例的訂閱消息的發(fā)布示意圖,如圖4所示,其中,serviceb為訂閱消息的發(fā)布方,圖5是根據(jù)本發(fā)明實(shí)施例的訂閱消息的發(fā)布流程圖,如圖5所示,包括:
s501,發(fā)送方服務(wù)通過(guò)數(shù)據(jù)庫(kù)客戶端與數(shù)據(jù)庫(kù)服務(wù)器建立鏈接;
s502,發(fā)送方服務(wù)進(jìn)行發(fā)布操作,發(fā)布操作中攜帶key2表征報(bào)文特征;
s503,查看本地路由緩存,如果有該key的本地路由緩存,直接點(diǎn)對(duì)點(diǎn)建立鏈接,發(fā)送消息;
s504,如果沒(méi)有該key的本地路由緩存,則查找數(shù)據(jù)庫(kù)中的sub記錄,將兩者的key進(jìn)行匹配,生成發(fā)布key的一條路由條目保持在數(shù)據(jù)庫(kù)中同時(shí)更新發(fā)布方本地緩存,然后點(diǎn)對(duì)點(diǎn)發(fā)送消息;
可選的,在具體的匹配過(guò)程中,匹配分為兩種:完全匹配和模糊匹配;可以先完全匹配,然后再模糊匹配。匹配到,則該key2生成一條路由條目保存在數(shù)據(jù)庫(kù)中,后更新發(fā)布方本地緩存,然后根據(jù)匹配到的訂閱方,點(diǎn)對(duì)點(diǎn)直接發(fā)送過(guò)去。
s505,如果在數(shù)據(jù)庫(kù)中沒(méi)有與sub記錄匹配成功,則發(fā)布的消息丟棄。
訂閱消息的訂閱方訂閱需要的訂閱消息,可以通過(guò)關(guān)鍵字key1作為標(biāo)識(shí)來(lái)表征需要的訂閱消息,將包括關(guān)鍵字key1訂閱信息保存在數(shù)據(jù)庫(kù)索引sub記錄中。消息發(fā)送方發(fā)送消息,其中可能包括訂閱消息,發(fā)送方可以通過(guò)關(guān)鍵字key2作為標(biāo)識(shí)來(lái)表征發(fā)送方發(fā)送消息的特征,然后在sub記錄中進(jìn)行匹配,尋找有哪些訂閱方訂閱了該特征的消息,查找訂閱方,并生成該key2對(duì)應(yīng)消息的路由條目或路由路徑。發(fā)送方根據(jù)路由條目向訂閱方發(fā)起一個(gè)輕量級(jí)的點(diǎn)對(duì)點(diǎn)通信鏈接,然后直接將消息發(fā)送給訂閱方。
可選的,在創(chuàng)建訂閱信息之后,訂閱方還可以通過(guò)關(guān)鍵字key3取消訂閱某類消息,其中,key3和key1可以相同或者不同,圖6是根據(jù)本發(fā)明實(shí)施例的取消訂閱的示意圖,如圖6所示,圖7是根據(jù)本發(fā)明實(shí)施例的取消訂閱流程圖,如圖7所示,取消訂閱的方法包括:
s701,通過(guò)數(shù)據(jù)庫(kù)客戶端與數(shù)據(jù)庫(kù)服務(wù)器建立鏈接;
s702,進(jìn)行取消訂閱操作,取消對(duì)于某個(gè)key的訂閱;如已經(jīng)訂閱的key1
s703,在數(shù)據(jù)庫(kù)的sub記錄中刪除該key下對(duì)應(yīng)的服務(wù)條目,然后在路由關(guān)系中根據(jù)key刪除對(duì)應(yīng)的路由條目,更新與該記錄相關(guān)的發(fā)布方的本地緩存。
可選的,在某些特定的場(chǎng)景下,在根據(jù)預(yù)存訂閱信息查找訂閱消息的訂閱方和發(fā)送訂閱消息的路由路徑之后,還可以修改訂閱方和路由路徑來(lái)臨時(shí)重新確定訂閱方和路由路徑,包括:
s21,接收用于修改訂閱方和/或修改路由路徑的第一請(qǐng)求消息;
s22,根據(jù)第一請(qǐng)求消息修改訂閱方得到指定訂閱方和/或修改路由路徑得到指定路由路徑。
s23,將指定訂閱方和定路由路徑確定為訂閱消息的接收方和/或發(fā)布訂閱消息的路由路徑。
如,可以修改路由條目來(lái)修改訂閱消息的投遞路徑:圖8是根據(jù)本發(fā)明實(shí)施例的修改消息路由路徑示意圖,如圖8所示,圖9是根據(jù)本發(fā)明實(shí)施例的修改路由路徑的流程圖,如圖9所示,包括:
s901,通過(guò)web客戶端修改某個(gè)key的投遞路徑;
s902,web服務(wù)器將命令傳遞給配置代理;
s903,配置代理修改該key在數(shù)據(jù)庫(kù)中的路由記錄;
s904,通過(guò)該key的路由記錄找到發(fā)布方,更新發(fā)布方的本地路由緩存。
通過(guò)消息的發(fā)布訂閱,根據(jù)消息的關(guān)鍵字key1,已經(jīng)生成了一條路由關(guān)系在數(shù)據(jù)庫(kù)中,路由條目示意如下:
key:key1
value:發(fā)布/servicea,訂閱/serviceb
如,在某個(gè)可選的場(chǎng)景下,新部署了服務(wù)c,它是服務(wù)b的增強(qiáng)版本,需要后續(xù)替代服務(wù)b,那么勢(shì)必需要后續(xù)將所有發(fā)往服務(wù)b的消息投遞給服務(wù)c。
可選的,可以通過(guò)命令行界面(command-lineinterface,簡(jiǎn)稱為cli)或者web客 戶端,經(jīng)配置代理,直接與數(shù)據(jù)庫(kù)服務(wù)器交互第一請(qǐng)求消息,修改路由條目,修改后的路由條目如下:
key:key1
value:發(fā)布/servicea,訂閱/servicec
可選的,還可以更新servicea的本地緩存,這樣后續(xù)所有key1特征的報(bào)文,直接投遞給新服務(wù)c,而不是服務(wù)b,整個(gè)過(guò)程對(duì)系統(tǒng)平滑無(wú)損。
在根據(jù)本實(shí)施例的可選實(shí)施方式中,在指示消息發(fā)送方將訂閱消息直接發(fā)布給訂閱方之前,還可以增加訂閱消息的接收方,即,臨時(shí)增加訂閱方,方法還包括:
s31,接收用于增加訂閱訂閱消息的第二請(qǐng)求消息;
s32,根據(jù)第二請(qǐng)求增加接收訂閱消息的指定訂閱方;
s33,指示消息發(fā)送方將訂閱消息發(fā)布給增加的指定訂閱方。
可選的,根據(jù)上述可選實(shí)施方式,在根據(jù)第二請(qǐng)求增加接收訂閱消息的指定訂閱方之后,還可以對(duì)訂閱消息進(jìn)行分流處理,如,可以將一條完整的訂閱消息進(jìn)行拆分后發(fā)給不同的訂閱方,方法還包括:
s41,判斷第二請(qǐng)求是否指示對(duì)訂閱消息進(jìn)行分流后發(fā)送給訂閱方和指定訂閱方;
s42,在判斷結(jié)果為是時(shí),將訂閱消息根據(jù)第二請(qǐng)求指示的權(quán)重值信息分流后發(fā)布給訂閱方和指定訂閱方。
下面結(jié)合場(chǎng)景進(jìn)行具體說(shuō)明:
通過(guò)消息的發(fā)布訂閱,如果基于消息關(guān)鍵字key1,服務(wù)b有兩份拷貝實(shí)例,都進(jìn)行了訂閱,并且該消息指定是非抄送模式,那么本會(huì)進(jìn)行負(fù)荷均衡,即對(duì)于key1特征的報(bào)文,投遞策略輪流投遞給服務(wù)b的兩個(gè)實(shí)例,即,訂閱方serviceb1、訂閱方serviceb2。
路由條目示意如下:
key:key1
value:發(fā)布/servicea,訂閱/serviceb1/1,訂閱/serviceb2/1
在路由條目選擇上,serviceb1和serviceb2權(quán)重都為1,會(huì)輪流選擇作為key1消息的目的方。
在某個(gè)可選的場(chǎng)景下,服務(wù)b需要升級(jí)成bb,新的版本需要融入到系統(tǒng)中試運(yùn)行,那么系統(tǒng)需要將一小部分的工作轉(zhuǎn)移到servicebb,這樣既可以讓新版本發(fā)揮功能,又避免如果新版本有故障,對(duì)系統(tǒng)的影響也能減少到最小。
可選的,本實(shí)例中本實(shí)施例中用戶通過(guò)在線命令cli或者web客戶端,經(jīng)配置代理,直接與數(shù)據(jù)庫(kù)服務(wù)器交互發(fā)送第二請(qǐng)求消息,修改消息訂閱方和權(quán)重,修改后的路由條目如下:
key:key1
value:發(fā)布/servicea,訂閱/serviceb1/40,訂閱/serviceb2/40,訂閱/servicebb/20
修改后,對(duì)于key1的消息,投遞目的方有serviceb實(shí)例1,serviceb實(shí)例2,以及servicebb實(shí)例3,投遞權(quán)重因子為40%,40%,20%。這樣后續(xù)報(bào)文的投遞,投遞給servicebb只占整個(gè)訂閱消息報(bào)文的20%。
通過(guò)以上的實(shí)施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到根據(jù)上述實(shí)施例的方法可借助軟件加必需的通用硬件平臺(tái)的方式來(lái)實(shí)現(xiàn),當(dāng)然也可以通過(guò)硬件,但很多情況下前者是更佳的實(shí)施方式?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說(shuō)對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來(lái),該計(jì)算機(jī)軟件產(chǎn)品存儲(chǔ)在一個(gè)存儲(chǔ)介質(zhì)(如rom/ram、磁碟、光盤)中,包括若干指令用以使得一臺(tái)終端設(shè)備(可以是手機(jī),計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個(gè)實(shí)施例的方法。
在本實(shí)施例中還提供了一種訂閱消息發(fā)布裝置,該裝置可以作為一個(gè)組件或者功能模塊設(shè)置在發(fā)布訂閱消息的服務(wù)器上,還可以設(shè)置在其他可以發(fā)送消息的設(shè)備上。該裝置用于實(shí)現(xiàn)上述實(shí)施例及優(yōu)選實(shí)施方式,已經(jīng)進(jìn)行過(guò)說(shuō)明的不再贅述。如以下所使用的,術(shù)語(yǔ)“模塊”可以實(shí)現(xiàn)預(yù)定功能的軟件和/或硬件的組合。盡管以下實(shí)施例所描述的裝置較佳地以軟件來(lái)實(shí)現(xiàn),但是硬件,或者軟件和硬件的組合的實(shí)現(xiàn)也是可能并被構(gòu)想的。
圖10是根據(jù)本發(fā)明實(shí)施例的訂閱消息發(fā)布裝置的結(jié)構(gòu)框圖,如圖10所示,該裝置包括:
第一接收模塊100,用于接收消息發(fā)送方發(fā)送的用于發(fā)送訂閱消息的請(qǐng)求消息;
第一指示模塊102,用于指示消息發(fā)送方將訂閱消息直接發(fā)布給訂閱方。
圖11是根據(jù)本發(fā)明實(shí)施例的訂閱消息發(fā)布裝置的可選結(jié)構(gòu)框圖一,如圖11所示,該裝置除包括圖10所示的所有模塊外,第一指示模塊102包括:
查找單元110,用于根據(jù)預(yù)存訂閱信息查找訂閱消息的訂閱方和發(fā)送訂閱消息的路由路徑;
指示單元112,用于指示消息發(fā)送方將訂閱消息通過(guò)路由路徑直接發(fā)布給訂閱方。
圖12是根據(jù)本發(fā)明實(shí)施例的訂閱消息發(fā)布裝置的可選結(jié)構(gòu)框圖二,如圖12所示,該裝置除包括圖11所示的所有模塊外,第一指示模塊102還包括:
第一接收單元120,用于在查找單元根據(jù)預(yù)存訂閱信息查找訂閱消息的訂閱方和發(fā)送訂閱消息的路由路徑之前,接收一個(gè)或多個(gè)訂閱方發(fā)送的訂閱信息,其中,訂閱信息包括以下至少之一:訂閱方需要接收的訂閱消息、訂閱方接收訂閱消息的路由路徑;
保存單元122,用于保存訂閱信息作為預(yù)存訂閱信息。
圖13是根據(jù)本發(fā)明實(shí)施例的訂閱消息發(fā)布裝置的可選結(jié)構(gòu)框圖三,如圖13所示,該裝置除包括圖11所示的所有模塊外,第一指示模塊102還包括:
第二接收單元130,用于在查找單元根據(jù)預(yù)存訂閱信息查找訂閱消息的訂閱方和發(fā)送訂閱消息的路由路徑之后,接收用于修改訂閱方和/或修改路由路徑的第一請(qǐng)求消息;
修改單元132,用于根據(jù)第一請(qǐng)求消息修改訂閱方得到指定訂閱方和/或修改路由路徑得到指定路由路徑。
確定單元134,用于將指定訂閱方和定路由路徑確定為訂閱消息的接收方和/或發(fā)布訂閱消息的路由路徑。
圖14是根據(jù)本發(fā)明實(shí)施例的訂閱消息發(fā)布裝置的可選結(jié)構(gòu)框圖四,如圖14所示,該裝置除包括圖10所示的所有模塊外,裝置還包括:
第二接收模塊140,用于在第一指示模塊指示消息發(fā)送方將訂閱消息直接發(fā)布給訂閱方之前,接收用于增加訂閱訂閱消息的第二請(qǐng)求消息;
增加模塊142,用于根據(jù)第二請(qǐng)求增加接收訂閱消息的指定訂閱方;
第二指示模塊144,用于指示消息發(fā)送方將訂閱消息發(fā)布給增加的指定訂閱方。
圖15是根據(jù)本發(fā)明實(shí)施例的訂閱消息發(fā)布裝置的可選結(jié)構(gòu)框圖五,如圖15所示,該裝置除包括圖14所示的所有模塊外,裝置還包括:
判斷模塊150,用于在增加模塊根據(jù)第二請(qǐng)求增加接收訂閱消息的指定訂閱方之后,判斷第二請(qǐng)求是否指示對(duì)訂閱消息進(jìn)行分流后發(fā)送給訂閱方和指定訂閱方;
分流模塊152,用于在判斷結(jié)果為是時(shí),將訂閱消息根據(jù)第二請(qǐng)求指示的權(quán)重值信息分流后發(fā)布給訂閱方和指定訂閱方。
需要說(shuō)明的是,上述各個(gè)模塊是可以通過(guò)軟件或硬件來(lái)實(shí)現(xiàn)的,對(duì)于后者,可以通過(guò)以下方式實(shí)現(xiàn),但不限于此:上述模塊均位于同一處理器中;或者,上述模塊分別位于多個(gè)處理器中。
本發(fā)明的實(shí)施例還提供了一種存儲(chǔ)介質(zhì)??蛇x地,在本實(shí)施例中,上述存儲(chǔ)介質(zhì)可以被設(shè)置為存儲(chǔ)用于執(zhí)行以下步驟的程序代碼:
s51,接收消息發(fā)送方發(fā)送的用于發(fā)送訂閱消息的請(qǐng)求消息;
s52,指示消息發(fā)送方將訂閱消息直接發(fā)布給訂閱方。
可選地,在本實(shí)施例中,上述存儲(chǔ)介質(zhì)可以包括但不限于:u盤、只讀存儲(chǔ)器(rom,read-onlymemory)、隨機(jī)存取存儲(chǔ)器(ram,randomaccessmemory)、移動(dòng)硬盤、磁碟或者光盤等各種可以存儲(chǔ)程序代碼的介質(zhì)。
可選地,在本實(shí)施例中,處理器根據(jù)存儲(chǔ)介質(zhì)中已存儲(chǔ)的程序代碼執(zhí)行接收消息發(fā)送方發(fā)送的用于發(fā)送訂閱消息的請(qǐng)求消息;
可選地,在本實(shí)施例中,處理器根據(jù)存儲(chǔ)介質(zhì)中已存儲(chǔ)的程序代碼執(zhí)行指示消息發(fā)送方將訂閱消息直接發(fā)布給訂閱方。
可選地,本實(shí)施例中的具體示例可以參考上述實(shí)施例及可選實(shí)施方式中所描述的示例,本實(shí)施例在此不再贅述。
顯然,本領(lǐng)域的技術(shù)人員應(yīng)該明白,上述的本發(fā)明的各模塊或各步驟可以用通用的計(jì)算裝置來(lái)實(shí)現(xiàn),它們可以集中在單個(gè)的計(jì)算裝置上,或者分布在多個(gè)計(jì)算裝置所組成的網(wǎng)絡(luò)上,可選地,它們可以用計(jì)算裝置可執(zhí)行的程序代碼來(lái)實(shí)現(xiàn),從而,可以將它們存儲(chǔ)在存儲(chǔ)裝置中由計(jì)算裝置來(lái)執(zhí)行,并且在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟,或者將它們分別制作成各個(gè)集成電路模塊,或者將它們中的多個(gè)模塊或步驟制作成單個(gè)集成電路模塊來(lái)實(shí)現(xiàn)。這樣,本發(fā)明不限制于任何特定的硬件和軟件結(jié)合。
以上所述僅為本發(fā)明的優(yōu)選實(shí)施例而已,并不用于限制本發(fā)明,對(duì)于本領(lǐng)域的技術(shù)人員來(lái)說(shuō),本發(fā)明可以有各種更改和變化。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。