本發(fā)明涉及網(wǎng)絡(luò)通訊技術(shù)領(lǐng)域,尤其涉及一種消息分發(fā)方法及服務(wù)器。
背景技術(shù):
消息中間件是一種由消息送達(dá)機(jī)制或消息隊(duì)列模式構(gòu)成的中間件技術(shù),利用高效可靠的消息傳遞機(jī)制進(jìn)行平臺(tái)無關(guān)的數(shù)據(jù)交流,并基于數(shù)據(jù)通信來進(jìn)行分布式系統(tǒng)的集成,在真實(shí)的應(yīng)用場(chǎng)景中,一個(gè)消息隊(duì)列存在著多個(gè)接收端的情況,所以所有的消息中間件都面臨著如何分發(fā)一個(gè)消息隊(duì)列中的業(yè)務(wù)消息給多個(gè)接收端。
目前常用的技術(shù)手段為:服務(wù)器主動(dòng)推送業(yè)務(wù)消息給接收端,此時(shí)消息的分發(fā)是由服務(wù)器主動(dòng)負(fù)責(zé)的,服務(wù)器會(huì)實(shí)時(shí)監(jiān)控有多少個(gè)接收端關(guān)注同一個(gè)業(yè)務(wù),并按照預(yù)置的規(guī)則將該業(yè)務(wù)的業(yè)務(wù)消息發(fā)送給接收端。
然而,上述服務(wù)器主動(dòng)推送業(yè)務(wù)消息的方式,存在以下缺陷:服務(wù)器需要維護(hù)所有的接收端的列表,并記錄消息隊(duì)列中上一次是哪個(gè)接收端接收到的了消息,以便基于上述預(yù)置的規(guī)則確定下一個(gè)消息需要發(fā)送給哪個(gè)接收端,這種主動(dòng)推送的方式將給服務(wù)器帶來較大的負(fù)載壓力,且隨著接收端的增多,這種負(fù)載壓力也會(huì)越來越大。
上述內(nèi)容僅用于輔助理解本發(fā)明的技術(shù)方案,并不代表承認(rèn)上述內(nèi)容是現(xiàn)有技術(shù)。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的主要目的在于提供一種消息分發(fā)方法及裝置,旨在解決現(xiàn)有技術(shù)中服務(wù)器通過主動(dòng)推送業(yè)務(wù)消息的方式帶來的負(fù)載壓力大的技術(shù)問題。
為實(shí)現(xiàn)上述目的,本發(fā)明提供的一種消息分發(fā)方法,對(duì)于每一種業(yè)務(wù),服務(wù)器包含關(guān)注所述業(yè)務(wù)的接收端與所述業(yè)務(wù)的消息隊(duì)列之間一一對(duì)應(yīng)的映射關(guān)系,所述消息隊(duì)列用于存儲(chǔ)業(yè)務(wù)消息,所述方法包括:
所述服務(wù)器接收消息獲取請(qǐng)求,所述消息獲取請(qǐng)求是第一接收端發(fā)送的;
所述服務(wù)器根據(jù)所述消息獲取請(qǐng)求及所述映射關(guān)系,確定用于存儲(chǔ)所述第一接收端請(qǐng)求獲取的業(yè)務(wù)消息的第一消息隊(duì)列;
監(jiān)聽所述第一消息隊(duì)列,若第一消息隊(duì)列中存儲(chǔ)第一業(yè)務(wù)消息,讀取所述第一業(yè)務(wù)消息并發(fā)送給所述第一接收端;若第一消息隊(duì)列中未存儲(chǔ)業(yè)務(wù)消息,則所述第一接收端處于等待狀態(tài),直到監(jiān)聽到所述第一消息隊(duì)列存儲(chǔ)有第一業(yè)務(wù)消息時(shí),讀取所述第一業(yè)務(wù)消息并發(fā)送給所述第一接收端。
優(yōu)選地,所述消息獲取請(qǐng)求中包含請(qǐng)求獲取的業(yè)務(wù)消息所屬的第一業(yè)務(wù);
則所述服務(wù)器根據(jù)所述消息獲取請(qǐng)求及所述映射關(guān)系,確定用于存儲(chǔ)所述第一接收端請(qǐng)求獲取的業(yè)務(wù)消息的第一消息隊(duì)列,包括:
獲取所述消息獲取請(qǐng)求中包含的所述第一業(yè)務(wù);
查找關(guān)注所述第一業(yè)務(wù)的接收端與所述第一業(yè)務(wù)的消息隊(duì)列之間一一對(duì)應(yīng)的映射關(guān)系,確定與所述第一接收端對(duì)應(yīng)的所述第一消息隊(duì)列。
優(yōu)選地,所述方法還包括:
所述服務(wù)器接收發(fā)送端發(fā)送的第二業(yè)務(wù)消息,所述第二業(yè)務(wù)消息中包含所述第二業(yè)務(wù)消息所屬的第二業(yè)務(wù);
所述服務(wù)器將發(fā)送端基于輪詢的方式發(fā)送的所述第二業(yè)務(wù)消息存儲(chǔ)至所述第二業(yè)務(wù)的消息隊(duì)列中。
優(yōu)選地,所述方法還包括:
所述服務(wù)器接收第二接收端發(fā)送的業(yè)務(wù)關(guān)注請(qǐng)求,所述業(yè)務(wù)關(guān)注請(qǐng)求中包含所述第二接收端請(qǐng)求關(guān)注的第三業(yè)務(wù);
所述服務(wù)器創(chuàng)建屬于所述第三業(yè)務(wù)的第二消息隊(duì)列,并建立所述第二消息隊(duì)列與所述第二接收端之間一一對(duì)應(yīng)的映射關(guān)系。
優(yōu)選地,所述方法還包括:
所述服務(wù)器在建立所述第二消息隊(duì)列與所述第二接收端之間一一對(duì)應(yīng)的映射關(guān)系之后,向關(guān)注所述第三業(yè)務(wù)的所有接收端發(fā)送重分配指令,使得接收到所述重分配指令的接收端向所述服務(wù)器反饋重新分配后的消息隊(duì)列;
所述服務(wù)器根據(jù)接收端反饋的消息隊(duì)列,更新關(guān)注所述第三業(yè)務(wù)的接收端與所述第三業(yè)務(wù)的消息隊(duì)列之間一一對(duì)應(yīng)的映射關(guān)系。
為實(shí)現(xiàn)上述目的,本發(fā)明還提供一種服務(wù)器,對(duì)于每一種業(yè)務(wù),所述服務(wù)器包含關(guān)注所述業(yè)務(wù)的接收端與所述業(yè)務(wù)的消息隊(duì)列之間一一對(duì)應(yīng)的映射關(guān)系,所述消息隊(duì)列用于存儲(chǔ)業(yè)務(wù)消息,所述服務(wù)器包括:
第一接收模塊,用于接收消息獲取請(qǐng)求,所述消息獲取請(qǐng)求是第一接收端發(fā)送的;
確定模塊,用于根據(jù)所述消息獲取請(qǐng)求及所述映射關(guān)系,確定用于存儲(chǔ)所述第一接收端請(qǐng)求獲取的業(yè)務(wù)消息的第一消息隊(duì)列;
監(jiān)聽發(fā)送模塊,用于監(jiān)聽所述第一消息隊(duì)列,若第一消息隊(duì)列中存儲(chǔ)第一業(yè)務(wù)消息,讀取所述第一業(yè)務(wù)消息并發(fā)送給所述第一接收端;若第一消息隊(duì)列中未存儲(chǔ)業(yè)務(wù)消息,則所述第一接收端處于等待狀態(tài),直到監(jiān)聽到所述第一消息隊(duì)列存儲(chǔ)有第一業(yè)務(wù)消息時(shí),讀取所述第一業(yè)務(wù)消息并發(fā)送給所述第一接收端。
優(yōu)選地,所述消息獲取請(qǐng)求中包含請(qǐng)求獲取的業(yè)務(wù)消息所屬的第一業(yè)務(wù);
則所述確定模塊具體用于:獲取所述消息獲取請(qǐng)求中包含的所述第一業(yè)務(wù);及查找關(guān)注所述第一業(yè)務(wù)的接收端與所述第一業(yè)務(wù)的消息隊(duì)列之間一一對(duì)應(yīng)的映射關(guān)系,確定與所述第一接收端對(duì)應(yīng)的所述第一消息隊(duì)列。
優(yōu)選地,所述服務(wù)器還包括:
第二接收模塊,用于接收發(fā)送端發(fā)送的第二業(yè)務(wù)消息,所述第二業(yè)務(wù)消息中包含所述第二業(yè)務(wù)消息所屬的第二業(yè)務(wù);
存儲(chǔ)模塊,用于將發(fā)送端基于輪詢的方式發(fā)送的所述第二業(yè)務(wù)消息存儲(chǔ)至所述第二業(yè)務(wù)的消息隊(duì)列中。
優(yōu)選地,所述服務(wù)器還包括:
第三接收模塊,用于接收第二接收端發(fā)送的業(yè)務(wù)關(guān)注請(qǐng)求,所述業(yè)務(wù)關(guān)注請(qǐng)求中包含所述第二接收端請(qǐng)求關(guān)注的第三業(yè)務(wù);
建立模塊,用于創(chuàng)建屬于所述第三業(yè)務(wù)的第二消息隊(duì)列,并建立所述第二消息隊(duì)列與所述第二接收端之間一一對(duì)應(yīng)的映射關(guān)系。
優(yōu)選地,所述服務(wù)器還包括:
指令發(fā)送模塊,用于在建立所述第二消息隊(duì)列與所述第二接收端之間一一對(duì)應(yīng)的映射關(guān)系之后,向關(guān)注所述第三業(yè)務(wù)的所有接收端發(fā)送重分配指令,使得接收到所述重分配指令的接收端向所述服務(wù)器反饋重新分配后的消息隊(duì)列;
更新模塊,用于根據(jù)接收端反饋的消息隊(duì)列,更新關(guān)注所述第三業(yè)務(wù)的接收端與所述第三業(yè)務(wù)的消息隊(duì)列之間一一對(duì)應(yīng)的映射關(guān)系。
本發(fā)明提供一種消息分發(fā)方法,對(duì)于每一種業(yè)務(wù),服務(wù)器包含關(guān)注該業(yè)務(wù)的接收端與該業(yè)務(wù)的消息隊(duì)列之間一一對(duì)應(yīng)的映射關(guān)系,即為每一個(gè)關(guān)注該業(yè)務(wù)的接收端設(shè)置一個(gè)消息隊(duì)列,該消息分發(fā)方法包括:服務(wù)器接收消息獲取請(qǐng)求,該消息獲取請(qǐng)求是由第一接收端發(fā)送的,服務(wù)器根據(jù)該消息獲取請(qǐng)求及上述映射關(guān)系,確定用于存儲(chǔ)該第一接收端請(qǐng)求獲取的業(yè)務(wù)消息的第一消息隊(duì)列,監(jiān)聽所述第一消息隊(duì)列,若第一消息隊(duì)列中存儲(chǔ)第一業(yè)務(wù)消息,讀取所述第一業(yè)務(wù)消息并發(fā)送給所述第一接收端;若第一消息隊(duì)列中未存儲(chǔ)業(yè)務(wù)消息,則接收端處于等待狀態(tài),直到監(jiān)聽到所述第一消息隊(duì)列存儲(chǔ)有第一業(yè)務(wù)消息時(shí),讀取所述第一業(yè)務(wù)消息并發(fā)送給所述第一接收端。其中,接收端可以通過發(fā)送消息獲取請(qǐng)求的方式主動(dòng)從服務(wù)器拉取業(yè)務(wù)消息,而不需要服務(wù)器主動(dòng)向接收端推送業(yè)務(wù)消息,使得能夠有效的減輕服務(wù)器的負(fù)載壓力。且在第一消息隊(duì)列中未存儲(chǔ)業(yè)務(wù)消息時(shí),通過監(jiān)聽該第一消息隊(duì)列,且在監(jiān)聽到第一消息隊(duì)列中存儲(chǔ)第一業(yè)務(wù)消息時(shí),服務(wù)器將該第一業(yè)務(wù)消息推給所述第一接收端,使得服務(wù)器不需要實(shí)時(shí)監(jiān)聽所有的業(yè)務(wù)的消息隊(duì)列,進(jìn)一步降低服務(wù)器的負(fù)載壓力。因此,通過推拉結(jié)合的方式能夠有效的實(shí)現(xiàn)消息的分發(fā),且降低服務(wù)器的負(fù)載壓力。
附圖說明
圖1為本發(fā)明實(shí)施例中消息分發(fā)系統(tǒng)的結(jié)構(gòu)示意圖;
圖2為本發(fā)明第一實(shí)施例中消息分發(fā)方法的流程示意圖;
圖3為本發(fā)明圖2所示第一實(shí)施例中消息分發(fā)方法的追加步驟的流程示意圖;
圖4為本發(fā)明圖2所示第一實(shí)施例中消息分發(fā)方法的追加步驟的流程示意圖;
圖5為本發(fā)明第二實(shí)施例中服務(wù)器的功能模塊的示意圖;
圖6為本發(fā)明第三實(shí)施例中服務(wù)器的功能模塊的示意圖。
本發(fā)明目的的實(shí)現(xiàn)、功能特點(diǎn)及優(yōu)點(diǎn)將結(jié)合實(shí)施例,參照附圖做進(jìn)一步說明。
具體實(shí)施方式
應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
由于現(xiàn)有技術(shù)中服務(wù)器主動(dòng)推送業(yè)務(wù)消息的方式將帶來服務(wù)器的負(fù)載壓力大的技術(shù)問題。
為了解決上述技術(shù)問題,本發(fā)明提出一種消息分發(fā)方法及裝置,在該方法中,接收端可以通過發(fā)送消息獲取請(qǐng)求的方式主動(dòng)從服務(wù)器拉取業(yè)務(wù)消息,而不需要服務(wù)器主動(dòng)向接收端推送業(yè)務(wù)消息,使得能夠有效的減輕服務(wù)器的負(fù)載壓力。且在第一消息隊(duì)列中未存儲(chǔ)業(yè)務(wù)消息時(shí),通過監(jiān)聽該第一消息隊(duì)列,且在監(jiān)聽到第一消息隊(duì)列中存儲(chǔ)第一業(yè)務(wù)消息時(shí),服務(wù)器將該第一業(yè)務(wù)消息推給所述第一接收端,使得服務(wù)器不需要實(shí)時(shí)監(jiān)聽所有的業(yè)務(wù)的消息隊(duì)列,進(jìn)一步降低服務(wù)器的負(fù)載壓力。因此,通過推拉結(jié)合的方式能夠有效的實(shí)現(xiàn)消息的分發(fā),且降低服務(wù)器的負(fù)載壓力。
本發(fā)明實(shí)施例中的消息分發(fā)方法可以應(yīng)用于消息中間件,且基于該消息中間件中的接收端、發(fā)送端及服務(wù)器實(shí)現(xiàn)消息的分發(fā),為了更好的理解本發(fā)明實(shí)施例中的技術(shù)方案,請(qǐng)參閱圖1,為本發(fā)明實(shí)施例中消息分發(fā)系統(tǒng)的結(jié)構(gòu)示意圖,包括:發(fā)送端、接收端、服務(wù)器。
其中,圖1所示的消息分發(fā)系統(tǒng)中的服務(wù)器可以是主服務(wù)器,且為了實(shí)現(xiàn)服務(wù)器的故障切換,該消息分發(fā)系統(tǒng)中還可以設(shè)置至少一個(gè)備份服務(wù)器,使得在主服務(wù)器發(fā)生故障時(shí),能夠?qū)⒃摴收系闹鞣?wù)器的業(yè)務(wù)切換至任意一個(gè)備份服務(wù)器,以避免業(yè)務(wù)的中斷。
在本發(fā)明實(shí)施例中,服務(wù)器可以處理多種類型的業(yè)務(wù),且接收端可以選擇需要關(guān)注的業(yè)務(wù),對(duì)于每一個(gè)業(yè)務(wù),服務(wù)器將設(shè)置關(guān)注該業(yè)務(wù)的接收端與該業(yè)務(wù)的消息隊(duì)列之間一一對(duì)應(yīng)的映射關(guān)系,可稱為業(yè)務(wù)的接收端與消息隊(duì)列之間的映射關(guān)系,例如,在圖1中,有接收端1至4關(guān)注業(yè)務(wù)1,則服務(wù)器為該業(yè)務(wù)1設(shè)置4個(gè)消息隊(duì)列,分別為消息隊(duì)列1-4,且每一個(gè)消息隊(duì)列都有唯一對(duì)應(yīng)的接收端。
可以理解的是,接收端可以同時(shí)關(guān)注多種類型的業(yè)務(wù),且服務(wù)器上可以包含多種類型的業(yè)務(wù),每一種業(yè)務(wù)都包含多個(gè)消息隊(duì)列。
基于圖1所示的系統(tǒng),請(qǐng)參閱圖2,為本發(fā)明第一實(shí)施例中消息分發(fā)方法的流程示意圖,該消息分發(fā)方法包括:
步驟201、所述服務(wù)器接收消息獲取請(qǐng)求,所述消息獲取請(qǐng)求是第一接收端發(fā)送的;
步驟202、所述服務(wù)器根據(jù)所述消息獲取請(qǐng)求及所述映射關(guān)系,確定用于存儲(chǔ)所述第一接收端請(qǐng)求獲取的業(yè)務(wù)消息的第一消息隊(duì)列;
步驟203、監(jiān)聽所述第一消息隊(duì)列,若第一消息隊(duì)列中存儲(chǔ)第一業(yè)務(wù)消息,讀取所述第一業(yè)務(wù)消息并發(fā)送給所述第一接收端;若第一消息隊(duì)列中未存儲(chǔ)業(yè)務(wù)消息,則所述第一接收端處于等待狀態(tài),直到監(jiān)聽到所述第一消息隊(duì)列存儲(chǔ)有第一業(yè)務(wù)消息時(shí),讀取所述第一業(yè)務(wù)消息并發(fā)送給所述第一接收端。
在本發(fā)明實(shí)施例中,接收端在需要獲取業(yè)務(wù)消息時(shí),可以向服務(wù)器發(fā)送消息獲取請(qǐng)求,以主動(dòng)拉取業(yè)務(wù)消息。
其中,服務(wù)器接收到第一接收端發(fā)送的消息獲取請(qǐng)求之后,將根據(jù)該消息獲取請(qǐng)求及服務(wù)器中已經(jīng)設(shè)置的各業(yè)務(wù)的接收端與消息隊(duì)列之間的映射關(guān)系確定用于存儲(chǔ)該第一接收端請(qǐng)求獲取的業(yè)務(wù)消息的第一消息隊(duì)列。
在本發(fā)明實(shí)施例中,消息獲取請(qǐng)求中可以包含第一接收端請(qǐng)求獲取的業(yè)務(wù)消息所屬的第一業(yè)務(wù),則服務(wù)器確定第一消息隊(duì)列的方式包括:獲取該消息獲取請(qǐng)求中包含的第一業(yè)務(wù),查找關(guān)注該第一業(yè)務(wù)的接收端與第一業(yè)務(wù)的消息隊(duì)列之間一一對(duì)應(yīng)的映射關(guān)系,確定用于存儲(chǔ)該第一接收端請(qǐng)求獲取的業(yè)務(wù)消息的第一消息隊(duì)列。例如,若接收端A發(fā)送的消息獲取請(qǐng)求中包含的業(yè)務(wù)是存款業(yè)務(wù),則服務(wù)器查找存款業(yè)務(wù)的接收端與消息隊(duì)列之間的映射關(guān)系,確定該接收端A對(duì)應(yīng)的消息隊(duì)列A,該消息隊(duì)列A即為用于存儲(chǔ)接收端A請(qǐng)求獲取的業(yè)務(wù)消息的消息隊(duì)列。
在本發(fā)明實(shí)施例,確定第一接收端請(qǐng)求獲取的業(yè)務(wù)消息所在的第一消息隊(duì)列之后,服務(wù)器將監(jiān)聽該第一消息隊(duì)列,若該第一消息隊(duì)列中存儲(chǔ)第一業(yè)務(wù)消息,則讀取該第一業(yè)務(wù)消息并發(fā)送給第一接收端,若該第一消息隊(duì)列中未存儲(chǔ)業(yè)務(wù)消息,則第一接收端處于等待狀態(tài),直至監(jiān)聽到第一消息隊(duì)列存儲(chǔ)有第一業(yè)務(wù)消息時(shí),讀取該第一業(yè)務(wù)消息并發(fā)送給第一接收端。
其中,第一接收端主動(dòng)拉取業(yè)務(wù)消息的方式為長(zhǎng)輪詢的方式,即向服務(wù)器發(fā)送消息獲取請(qǐng)求,服務(wù)器接收到該消息獲取請(qǐng)求之后保持與第一接收端之間用于傳輸業(yè)務(wù)消息的連接,直到與該第一接收端對(duì)應(yīng)的第一消息隊(duì)列中存儲(chǔ)有第一業(yè)務(wù)消息時(shí),服務(wù)器將讀取的該第一業(yè)務(wù)消息通過上述連接反饋給第一接收端,并釋放與第一接收端之間用于傳輸業(yè)務(wù)消息的連接。且在第一接收端下次還需要獲取業(yè)務(wù)消息時(shí),可以再次發(fā)送上述消息獲取請(qǐng)求。
在本發(fā)明實(shí)施例中,服務(wù)器接收消息獲取請(qǐng)求,該消息獲取請(qǐng)求是由第一接收端發(fā)送的,服務(wù)器根據(jù)該消息獲取請(qǐng)求及各業(yè)務(wù)的接收端與消息隊(duì)列之間的映射關(guān)系,確定用于存儲(chǔ)該第一接收端請(qǐng)求獲取的業(yè)務(wù)消息的第一消息隊(duì)列,并監(jiān)聽該第一消息隊(duì)列,若該第一消息隊(duì)列中存儲(chǔ)第一業(yè)務(wù)消息,讀取該第一業(yè)務(wù)消息并發(fā)送給第一接收端,若該第一消息隊(duì)列中未存儲(chǔ)業(yè)務(wù)消息,則第一接收端處于等待狀態(tài),直到監(jiān)聽到第一消息隊(duì)列存儲(chǔ)有第一業(yè)務(wù)消息時(shí),讀取該第一業(yè)務(wù)消息并發(fā)送給第一接收端。其中,接收端可以通過發(fā)送消息獲取請(qǐng)求的方式主動(dòng)從服務(wù)器拉取業(yè)務(wù)消息,而不需要服務(wù)器主動(dòng)向接收端推送業(yè)務(wù)消息,使得能夠有效的減輕服務(wù)器的負(fù)載壓力。且在第一消息隊(duì)列中未存儲(chǔ)業(yè)務(wù)消息時(shí),通過監(jiān)聽該第一消息隊(duì)列,且在監(jiān)聽到第一消息隊(duì)列中存儲(chǔ)第一業(yè)務(wù)消息時(shí),服務(wù)器將該第一業(yè)務(wù)消息推給所述第一接收端,使得服務(wù)器不需要實(shí)時(shí)監(jiān)聽所有的業(yè)務(wù)的消息隊(duì)列,進(jìn)一步降低服務(wù)器的負(fù)載壓力。因此,通過推拉結(jié)合的方式能夠有效的實(shí)現(xiàn)消息的分發(fā),且降低服務(wù)器的負(fù)載壓力。
在本發(fā)明實(shí)施例中,消息隊(duì)列中的業(yè)務(wù)消息是由發(fā)送端發(fā)送的,因此,基于圖2所示的第一實(shí)施例,請(qǐng)參閱圖3,為本發(fā)明實(shí)施例圖2所示第一實(shí)施例的追加步驟的流程示意圖,該追加步驟包括:
步驟301、所述服務(wù)器接收發(fā)送端發(fā)送的第二業(yè)務(wù)消息,所述第二業(yè)務(wù)消息中包含所述第二業(yè)務(wù)消息所屬的第二業(yè)務(wù);
步驟302、所述服務(wù)器將發(fā)送端基于輪詢的方式發(fā)送的所述第二業(yè)務(wù)消息存儲(chǔ)至所述第二業(yè)務(wù)的消息隊(duì)列中。
在本發(fā)明實(shí)施例中,發(fā)送端在生成第二業(yè)務(wù)消息之后,將該第二業(yè)務(wù)消息發(fā)送給服務(wù)器,該第二業(yè)務(wù)消息中包含該第二業(yè)務(wù)消息所屬的第二業(yè)務(wù)。
服務(wù)器在接收到第二業(yè)務(wù)消息之后,將發(fā)送端基于輪詢的方式發(fā)送的第二業(yè)務(wù)消息存儲(chǔ)至所述第二業(yè)務(wù)的消息隊(duì)列中。具體的,對(duì)于第二業(yè)務(wù)的多個(gè)消息隊(duì)列,發(fā)送端預(yù)先設(shè)置了該多個(gè)消息隊(duì)列存儲(chǔ)業(yè)務(wù)消息的順序,且發(fā)送端將確定上一次存儲(chǔ)業(yè)務(wù)消息的消息隊(duì)列,并將第二業(yè)務(wù)消息存儲(chǔ)至上一次存儲(chǔ)業(yè)務(wù)消息的消息隊(duì)列的下一個(gè)消息隊(duì)列,基于輪詢的方式進(jìn)行業(yè)務(wù)消息的發(fā)送,能夠?qū)崿F(xiàn)屬于同一個(gè)業(yè)務(wù)的多個(gè)消息隊(duì)列之前能夠?qū)崿F(xiàn)負(fù)載均衡。例如:若對(duì)于業(yè)務(wù)A,其已經(jīng)具有消息隊(duì)列1-5,且業(yè)務(wù)消息的存儲(chǔ)順序是從消息隊(duì)列1依次存儲(chǔ)至消息隊(duì)列5,且向消息隊(duì)列5中發(fā)送業(yè)務(wù)消息之后,下一個(gè)業(yè)務(wù)消息將發(fā)送至消息隊(duì)列1,并以此循環(huán),此即為輪詢的存儲(chǔ)方式。當(dāng)發(fā)送端發(fā)送屬于業(yè)務(wù)A的業(yè)務(wù)消息B時(shí),確定上一次發(fā)送屬于該業(yè)務(wù)A的消息到消息隊(duì)列3,則將該業(yè)務(wù)消息B發(fā)送到消息隊(duì)列4中。
在本發(fā)明實(shí)施例中,服務(wù)器接收到發(fā)送端發(fā)送的第二業(yè)務(wù)消息之后,將發(fā)送端基于輪詢的方式發(fā)送的第二業(yè)務(wù)消息存儲(chǔ)至所述第二業(yè)務(wù)的消息隊(duì)列中,使得同一個(gè)業(yè)務(wù)的多個(gè)消息隊(duì)列存儲(chǔ)的業(yè)務(wù)消息個(gè)數(shù)保持均衡。
基于圖2所示的第一實(shí)施例,請(qǐng)參閱圖4,為本發(fā)明圖2所示第一實(shí)施例的追加步驟的流程示意圖,該追加步驟包括:
步驟401、所述服務(wù)器接收第二接收端發(fā)送的業(yè)務(wù)關(guān)注請(qǐng)求,所述業(yè)務(wù)關(guān)注請(qǐng)求中包含所述第二接收端請(qǐng)求關(guān)注的第三業(yè)務(wù);
步驟402、所述服務(wù)器創(chuàng)建屬于所述第三業(yè)務(wù)的第二消息隊(duì)列,并建立所述第二消息隊(duì)列與所述第二接收端之間一一對(duì)應(yīng)的映射關(guān)系。
在本發(fā)明實(shí)施例中,服務(wù)器上可以有多種業(yè)務(wù),且每一種業(yè)務(wù)都有多個(gè)消息隊(duì)列,業(yè)務(wù)中的每一個(gè)消息隊(duì)列都與接收端之間有一一對(duì)應(yīng)的映射關(guān)系,其中,業(yè)務(wù)中的消息隊(duì)列與接收端之間的一一對(duì)應(yīng)的映射關(guān)系是基于接收端對(duì)業(yè)務(wù)的關(guān)注需求建立的。若第二接收端初始的時(shí)候并未關(guān)注第三業(yè)務(wù),則在服務(wù)器的第三業(yè)務(wù)的消息隊(duì)列中將不存在與該第二接收端對(duì)應(yīng)的消息隊(duì)列,若第二接收端需要關(guān)注第三業(yè)務(wù),則第二接收端可以向服務(wù)器發(fā)送業(yè)務(wù)關(guān)注請(qǐng)求,該業(yè)務(wù)關(guān)注請(qǐng)求中包含第二接收端請(qǐng)求關(guān)注的第三業(yè)務(wù)。
服務(wù)器在接收到上述業(yè)務(wù)關(guān)注請(qǐng)求之后,將創(chuàng)建屬于第三業(yè)務(wù)的第二消息隊(duì)列,并建立該第二消息隊(duì)列與第二接收端之間一一對(duì)應(yīng)的映射關(guān)系。例如:若第三業(yè)務(wù)原來已有的消息隊(duì)列為消息隊(duì)列1-4,該消息隊(duì)列1-4分別與接收端1-4具有一一對(duì)應(yīng)的映射關(guān)系,若服務(wù)器接收到接收端5(即第二接收端)對(duì)該第三業(yè)務(wù)的業(yè)務(wù)關(guān)注請(qǐng)求,則在第三業(yè)務(wù)的消息隊(duì)列中創(chuàng)建消息隊(duì)列5,并在第三業(yè)務(wù)中建立消息隊(duì)列5與接收端5之間一一對(duì)應(yīng)的映射關(guān)系。
可以理解的是,在第三業(yè)務(wù)中增加第二消息隊(duì)列之后,發(fā)送屬于第三業(yè)務(wù)的業(yè)務(wù)消息的發(fā)送端將重新設(shè)置向該第三業(yè)務(wù)的多個(gè)消息隊(duì)列發(fā)送業(yè)務(wù)消息時(shí)的輪詢規(guī)則,例如,若原來發(fā)送屬于第三業(yè)務(wù)的業(yè)務(wù)消息的順序是從第三業(yè)務(wù)中的消息隊(duì)列1至10,接收到第二接收端發(fā)送的業(yè)務(wù)關(guān)注請(qǐng)求之后,創(chuàng)建消息隊(duì)列11(即為第二消息隊(duì)列),則發(fā)送屬于第三業(yè)務(wù)的業(yè)務(wù)消息的順序從原來的消息隊(duì)列1至10,變更為消息隊(duì)列1至11,發(fā)送第三業(yè)務(wù)的業(yè)務(wù)消息的發(fā)送端在向服務(wù)器的第三業(yè)務(wù)的消息隊(duì)列10發(fā)送業(yè)務(wù)消息之后,將下一個(gè)業(yè)務(wù)消息發(fā)送至第三業(yè)務(wù)的消息隊(duì)列11,以實(shí)現(xiàn)基于輪詢方式的業(yè)務(wù)消息的發(fā)送。
需要說明的是,服務(wù)器側(cè)的某一個(gè)業(yè)務(wù)的消息隊(duì)列的個(gè)數(shù)發(fā)生變更時(shí),服務(wù)器將該業(yè)務(wù)變更后消息隊(duì)列發(fā)送給消息中間件中的控制端,控制端接收到變更后的消息隊(duì)列之后,將該變更后的消息隊(duì)列發(fā)送給發(fā)送端,使得發(fā)送端能夠基于變更后的消息隊(duì)列重新確定其向服務(wù)器發(fā)送業(yè)務(wù)消息的發(fā)送順序。
可以理解的,為了使得各接收端從服務(wù)器拉去的業(yè)務(wù)消息的個(gè)數(shù)是均衡的,服務(wù)器在創(chuàng)建上述第二消息隊(duì)列,且建立第二消息隊(duì)列與第二接收端之間一一對(duì)應(yīng)的映射關(guān)系之后,服務(wù)器還將執(zhí)行以下步驟:
步驟403、所述服務(wù)器在為所述第二接收端創(chuàng)建消息隊(duì)列之后,向關(guān)注所述第三業(yè)務(wù)的所有接收端發(fā)送重分配指令,使得接收到所述重分配指令的接收端向所述服務(wù)器反饋用戶選擇的消息隊(duì)列;
步驟404、所述服務(wù)器根據(jù)接收端反饋的消息隊(duì)列,更新關(guān)注所述第三業(yè)務(wù)的接收端與所述第三業(yè)務(wù)的消息隊(duì)列之間一一對(duì)應(yīng)的映射關(guān)系。
在本發(fā)明實(shí)施例中,服務(wù)器向關(guān)注第三業(yè)務(wù)的所有接收端發(fā)送重分配指令,關(guān)注該第三業(yè)務(wù)的接收端接收到該重分配指令之后,將基于預(yù)先設(shè)置的統(tǒng)一的分配算法確定重新分配后的消息隊(duì)列,并將重新分配后的消息隊(duì)列反饋給服務(wù)器。
服務(wù)器在接收到關(guān)注第三業(yè)務(wù)的所有接收端反饋的重新分配后的消息隊(duì)列之后,將更新關(guān)注該第三業(yè)務(wù)的接收端與第三業(yè)務(wù)的消息對(duì)之間一一對(duì)應(yīng)的映射關(guān)系。
在本發(fā)明實(shí)施例中,服務(wù)器接收到第二接收端發(fā)送的業(yè)務(wù)關(guān)注請(qǐng)求后,將創(chuàng)建屬于該第二接收端請(qǐng)求關(guān)注的第三業(yè)務(wù)的第二消息隊(duì)列,并建立該第二消息隊(duì)列與該第二接收端之間的一一對(duì)應(yīng)的映射關(guān)系,使得在在第二接收端請(qǐng)求第三業(yè)務(wù)的業(yè)務(wù)消息時(shí),服務(wù)器可以將該第二消息隊(duì)列中的業(yè)務(wù)消息發(fā)送給該第二接收端,有效實(shí)現(xiàn)消息的分發(fā)。且在建立第二消息隊(duì)列與第二接收端之間的一一對(duì)應(yīng)的映射關(guān)系之后,服務(wù)器將向關(guān)注該第三業(yè)務(wù)的所有接收端發(fā)送重分配指令,并基于接收端反饋的重新分配后的消息隊(duì)列更新該第三業(yè)務(wù)的接收端與消息隊(duì)列之間一一對(duì)應(yīng)的映射關(guān)系,有效實(shí)現(xiàn)接收端從服務(wù)器拉取的業(yè)務(wù)消息是均衡的。
下面將介紹實(shí)現(xiàn)圖2所示第一實(shí)施例中的消息分發(fā)方法的服務(wù)器,該服務(wù)器也為圖1所示的結(jié)構(gòu)示意圖中服務(wù)器。
請(qǐng)參閱圖5,為本發(fā)明第二實(shí)施例中服務(wù)器的功能模塊的示意圖,該服務(wù)器包括:第一接收模塊501、確定模塊502及監(jiān)聽發(fā)送模塊503。
第一接收模塊501,用于接收消息獲取請(qǐng)求,所述消息獲取請(qǐng)求是第一接收端發(fā)送的;
確定模塊502,用于根據(jù)所述消息獲取請(qǐng)求及所述映射關(guān)系,確定用于存儲(chǔ)所述第一接收端請(qǐng)求獲取的業(yè)務(wù)消息的第一消息隊(duì)列;
監(jiān)聽發(fā)送模塊503,用于監(jiān)聽所述第一消息隊(duì)列,若第一消息隊(duì)列中存儲(chǔ)第一業(yè)務(wù)消息,讀取所述第一業(yè)務(wù)消息并發(fā)送給所述第一接收端;若第一消息隊(duì)列中未存儲(chǔ)業(yè)務(wù)消息,則所述第一接收端處于等待狀態(tài),直到監(jiān)聽到所述第一消息隊(duì)列存儲(chǔ)有第一業(yè)務(wù)消息時(shí),讀取所述第一業(yè)務(wù)消息并發(fā)送給所述第一接收端。
在本發(fā)明實(shí)施例中,所述確定模塊502具體用于:獲取所述消息獲取請(qǐng)求中包含的所述第一業(yè)務(wù);及查找關(guān)注所述第一業(yè)務(wù)的接收端與所述第一業(yè)務(wù)的消息隊(duì)列之間一一對(duì)應(yīng)的映射關(guān)系,確定與所述第一接收端對(duì)應(yīng)的所述第一消息隊(duì)列。
在本發(fā)明實(shí)施例中,接收端在需要獲取業(yè)務(wù)消息時(shí),可以向服務(wù)器發(fā)送消息獲取請(qǐng)求,以主動(dòng)拉取業(yè)務(wù)消息。
其中,服務(wù)器的第一接收模塊501接收到第一接收端發(fā)送的消息獲取請(qǐng)求之后,確定模塊502將根據(jù)該消息獲取請(qǐng)求及服務(wù)器中已經(jīng)設(shè)置的各業(yè)務(wù)的接收端與消息隊(duì)列之間的映射關(guān)系確定用于存儲(chǔ)該第一接收端請(qǐng)求獲取的業(yè)務(wù)消息的第一消息隊(duì)列。
在本發(fā)明實(shí)施例中,消息獲取請(qǐng)求中可以包含第一接收端請(qǐng)求獲取的業(yè)務(wù)消息所屬的第一業(yè)務(wù),則確定模塊502確定第一消息隊(duì)列的方式包括:獲取該消息獲取請(qǐng)求中包含的第一業(yè)務(wù),查找關(guān)注該第一業(yè)務(wù)的接收端與第一業(yè)務(wù)的消息隊(duì)列之間一一對(duì)應(yīng)的映射關(guān)系,確定用于存儲(chǔ)該第一接收端請(qǐng)求獲取的業(yè)務(wù)消息的第一消息隊(duì)列。例如,若接收端A發(fā)送的消息獲取請(qǐng)求中包含的業(yè)務(wù)是存款業(yè)務(wù),則服務(wù)器查找存款業(yè)務(wù)的接收端與消息隊(duì)列之間的映射關(guān)系,確定該接收端A對(duì)應(yīng)的消息隊(duì)列A,該消息隊(duì)列A即為用于存儲(chǔ)接收端A請(qǐng)求獲取的業(yè)務(wù)消息的消息隊(duì)列。
在本發(fā)明實(shí)施例,確定第一接收端請(qǐng)求獲取的業(yè)務(wù)消息所在的第一消息隊(duì)列之后,監(jiān)聽發(fā)送模塊503將監(jiān)聽該第一消息隊(duì)列,若該第一消息隊(duì)列中存儲(chǔ)第一業(yè)務(wù)消息,則讀取該第一業(yè)務(wù)消息并發(fā)送給第一接收端,若該第一消息隊(duì)列中未存儲(chǔ)業(yè)務(wù)消息,則第一接收端處于等待狀態(tài),直至監(jiān)聽到第一消息隊(duì)列存儲(chǔ)有第一業(yè)務(wù)消息時(shí),讀取該第一業(yè)務(wù)消息并發(fā)送給第一接收端。
其中,第一接收端主動(dòng)拉取業(yè)務(wù)消息的方式為長(zhǎng)輪詢的方式,即向服務(wù)器發(fā)送消息獲取請(qǐng)求,服務(wù)器接收到該消息獲取請(qǐng)求之后保持與第一接收端之間用于傳輸業(yè)務(wù)消息的連接,直到與該第一接收端對(duì)應(yīng)的第一消息隊(duì)列中存儲(chǔ)有第一業(yè)務(wù)消息時(shí),服務(wù)器將讀取的該第一業(yè)務(wù)消息通過上述連接反饋給第一接收端,并釋放與第一接收端之間用于傳輸業(yè)務(wù)消息的連接。且在第一接收端下次還需要獲取業(yè)務(wù)消息時(shí),可以再次發(fā)送上述消息獲取請(qǐng)求。
在本發(fā)明實(shí)施例中,第一接收模塊501接收消息獲取請(qǐng)求,該消息獲取請(qǐng)求是由第一接收端發(fā)送的,并由確定模塊502根據(jù)該消息獲取請(qǐng)求及各業(yè)務(wù)的接收端與消息隊(duì)列之間的映射關(guān)系,確定用于存儲(chǔ)該第一接收端請(qǐng)求獲取的業(yè)務(wù)消息的第一消息隊(duì)列,且監(jiān)聽發(fā)送模塊503監(jiān)聽該第一消息隊(duì)列,若該第一消息隊(duì)列中存儲(chǔ)第一業(yè)務(wù)消息,讀取該第一業(yè)務(wù)消息并發(fā)送給第一接收端,若該第一消息隊(duì)列中未存儲(chǔ)業(yè)務(wù)消息,則第一接收端處于等待狀態(tài),直到監(jiān)聽到第一消息隊(duì)列存儲(chǔ)有第一業(yè)務(wù)消息時(shí),讀取該第一業(yè)務(wù)消息并發(fā)送給第一接收端。其中,接收端可以通過發(fā)送消息獲取請(qǐng)求的方式主動(dòng)從服務(wù)器拉取業(yè)務(wù)消息,而不需要服務(wù)器主動(dòng)向接收端推送業(yè)務(wù)消息,使得能夠有效的減輕服務(wù)器的負(fù)載壓力。且在第一消息隊(duì)列中未存儲(chǔ)業(yè)務(wù)消息時(shí),通過監(jiān)聽該第一消息隊(duì)列,且在監(jiān)聽到第一消息隊(duì)列中存儲(chǔ)第一業(yè)務(wù)消息時(shí),服務(wù)器將該第一業(yè)務(wù)消息推給所述第一接收端,使得服務(wù)器不需要實(shí)時(shí)監(jiān)聽所有的業(yè)務(wù)的消息隊(duì)列,進(jìn)一步降低服務(wù)器的負(fù)載壓力。因此,通過推拉結(jié)合的方式能夠有效的實(shí)現(xiàn)消息的分發(fā),且降低服務(wù)器的負(fù)載壓力。
在本發(fā)明實(shí)施例中,圖5所示第二實(shí)施例中的消息獲取請(qǐng)求中包含請(qǐng)求獲取的業(yè)務(wù)消息所屬的第一業(yè)務(wù)。請(qǐng)參閱圖6,為本發(fā)明第三實(shí)施例中服務(wù)器的功能模塊的示意圖,該服務(wù)器包括如圖5所示的第一接收模塊501、確定模塊502及監(jiān)聽發(fā)送模塊503,且與圖5所示第二實(shí)施例描述的內(nèi)容相似,此處不做贅述。
在本發(fā)明實(shí)施例中,所述服務(wù)器還包括:
第二接收模塊601,用于接收發(fā)送端發(fā)送的第二業(yè)務(wù)消息,所述第二業(yè)務(wù)消息中包含所述第二業(yè)務(wù)消息所屬的第二業(yè)務(wù);
存儲(chǔ)模塊602,用于將發(fā)送端基于輪詢的方式發(fā)送的所述第二業(yè)務(wù)消息存儲(chǔ)至所述第二業(yè)務(wù)的消息隊(duì)列中。
在本發(fā)明實(shí)施例中,發(fā)送端在生成第二業(yè)務(wù)消息之后,將該第二業(yè)務(wù)消息發(fā)送給服務(wù)器,該第二業(yè)務(wù)消息中包含該第二業(yè)務(wù)消息所屬的第二業(yè)務(wù)。
服務(wù)器的第二接收模塊601在接收到第二業(yè)務(wù)消息之后,存儲(chǔ)模塊602將發(fā)送端基于輪詢的方式發(fā)送的第二業(yè)務(wù)消息存儲(chǔ)至所述第二業(yè)務(wù)的消息隊(duì)列中。具體的,對(duì)于第二業(yè)務(wù)的多個(gè)消息隊(duì)列,發(fā)送端預(yù)先設(shè)置了該多個(gè)消息隊(duì)列存儲(chǔ)業(yè)務(wù)消息的順序,且發(fā)送端將確定上一次存儲(chǔ)業(yè)務(wù)消息的消息隊(duì)列,并將第二業(yè)務(wù)消息存儲(chǔ)至上一次存儲(chǔ)業(yè)務(wù)消息的消息隊(duì)列的下一個(gè)消息隊(duì)列,基于輪詢的方式進(jìn)行業(yè)務(wù)消息的發(fā)送,能夠?qū)崿F(xiàn)屬于同一個(gè)業(yè)務(wù)的多個(gè)消息隊(duì)列之前能夠?qū)崿F(xiàn)負(fù)載均衡。例如:若對(duì)于業(yè)務(wù)A,其已經(jīng)具有消息隊(duì)列1-5,且業(yè)務(wù)消息的存儲(chǔ)順序是從消息隊(duì)列1依次存儲(chǔ)至消息隊(duì)列5,且向消息隊(duì)列5中發(fā)送業(yè)務(wù)消息之后,下一個(gè)業(yè)務(wù)消息將發(fā)送至消息隊(duì)列1,并以此循環(huán),此即為輪詢的存儲(chǔ)方式。當(dāng)發(fā)送端發(fā)送屬于業(yè)務(wù)A的業(yè)務(wù)消息B時(shí),確定上一次發(fā)送屬于該業(yè)務(wù)A的消息到消息隊(duì)列3,則將該業(yè)務(wù)消息B發(fā)送到消息隊(duì)列4中。
在本發(fā)明實(shí)施例中,服務(wù)器接收到發(fā)送端發(fā)送的第二業(yè)務(wù)消息之后,將發(fā)送端基于輪詢的方式發(fā)送的第二業(yè)務(wù)消息存儲(chǔ)至所述第二業(yè)務(wù)的消息隊(duì)列中,使得同一個(gè)業(yè)務(wù)的多個(gè)消息隊(duì)列存儲(chǔ)的業(yè)務(wù)消息個(gè)數(shù)保持均衡。
進(jìn)一步的,在圖6所示第三實(shí)施例中,所述服務(wù)器還包括:
第三接收模塊603,用于接收第二接收端發(fā)送的業(yè)務(wù)關(guān)注請(qǐng)求,所述業(yè)務(wù)關(guān)注請(qǐng)求中包含所述第二接收端請(qǐng)求關(guān)注的第三業(yè)務(wù);
建立模塊604,用于創(chuàng)建屬于所述第三業(yè)務(wù)的第二消息隊(duì)列,并建立所述第二消息隊(duì)列與所述第二接收端之間一一對(duì)應(yīng)的映射關(guān)系。
在本發(fā)明實(shí)施例中,所述服務(wù)器還包括:
指令發(fā)送模塊605,用于在建立所述第二消息隊(duì)列與所述第二接收端之間一一對(duì)應(yīng)的映射關(guān)系之后,向關(guān)注所述第三業(yè)務(wù)的所有接收端發(fā)送重分配指令,使得接收到所述重分配指令的接收端向所述服務(wù)器反饋重新分配后的消息隊(duì)列;
更新模塊606,用于根據(jù)接收端反饋的消息隊(duì)列,更新關(guān)注所述第三業(yè)務(wù)的接收端與所述第三業(yè)務(wù)的消息隊(duì)列之間一一對(duì)應(yīng)的映射關(guān)系。
在本發(fā)明實(shí)施例中,若第二接收端需要關(guān)注第三業(yè)務(wù),則該第二接收端將向服務(wù)器發(fā)送業(yè)務(wù)關(guān)注請(qǐng)求,該業(yè)務(wù)關(guān)注請(qǐng)求中包含該第二接收端請(qǐng)求關(guān)注的第三業(yè)務(wù)。
服務(wù)器的第三接收模塊603在接收到上述業(yè)務(wù)關(guān)注請(qǐng)求之后,建立模塊604將創(chuàng)建屬于第三業(yè)務(wù)的第二消息隊(duì)列,并建立該第二消息隊(duì)列與第二接收端之間一一對(duì)應(yīng)的映射關(guān)系。
在本發(fā)明實(shí)施例中,服務(wù)器上可以有多種業(yè)務(wù),且每一種業(yè)務(wù)都有多個(gè)消息隊(duì)列,業(yè)務(wù)中的每一個(gè)消息隊(duì)列都與接收端之間有一一對(duì)應(yīng)的映射關(guān)系,
其中,業(yè)務(wù)中的消息隊(duì)列與接收端之間的一一對(duì)應(yīng)的映射關(guān)系是基于接收端對(duì)業(yè)務(wù)的關(guān)注需求建立的。若第二接收端初始的時(shí)候并未關(guān)注第三業(yè)務(wù),則在服務(wù)器的第三業(yè)務(wù)的消息隊(duì)列中將不存在與該第二接收端對(duì)應(yīng)的消息隊(duì)列,若第二接收端需要關(guān)注第三業(yè)務(wù),則第二接收端可以向服務(wù)器發(fā)送業(yè)務(wù)關(guān)注請(qǐng)求,該業(yè)務(wù)關(guān)注請(qǐng)求中包含第二接收端請(qǐng)求關(guān)注的第三業(yè)務(wù)。
其中,服務(wù)器中的第三接收模塊603將接收第二接收端發(fā)送的業(yè)務(wù)關(guān)注請(qǐng)求。
在接收到上述業(yè)務(wù)關(guān)注請(qǐng)求之后,建立模塊604將創(chuàng)建屬于第三業(yè)務(wù)的第二消息隊(duì)列,并建立該第二消息隊(duì)列與第二接收端之間一一對(duì)應(yīng)的映射關(guān)系。例如:若第三業(yè)務(wù)原來已有的消息隊(duì)列為消息隊(duì)列1-4,該消息隊(duì)列1-4分別與接收端1-4具有一一對(duì)應(yīng)的映射關(guān)系,若服務(wù)器接收到接收端5(即第二接收端)對(duì)該第三業(yè)務(wù)的業(yè)務(wù)關(guān)注請(qǐng)求,則在第三業(yè)務(wù)的消息隊(duì)列中創(chuàng)建消息隊(duì)列5,并在第三業(yè)務(wù)中建立消息隊(duì)列5與接收端5之間一一對(duì)應(yīng)的映射關(guān)系。
可以理解的是,在第三業(yè)務(wù)中增加第二消息隊(duì)列之后,發(fā)送屬于第三業(yè)務(wù)的業(yè)務(wù)消息的發(fā)送端將重新設(shè)置向該第三業(yè)務(wù)的多個(gè)消息隊(duì)列發(fā)送業(yè)務(wù)消息時(shí)的輪詢規(guī)則,例如,若原來發(fā)送屬于第三業(yè)務(wù)的業(yè)務(wù)消息的順序是從第三業(yè)務(wù)中的消息隊(duì)列1至10,接收到第二接收端發(fā)送的業(yè)務(wù)關(guān)注請(qǐng)求之后,創(chuàng)建消息隊(duì)列11(即為第二消息隊(duì)列),則發(fā)送屬于第三業(yè)務(wù)的業(yè)務(wù)消息的順序從原來的消息隊(duì)列1至10,變更為消息隊(duì)列1至11,發(fā)送第三業(yè)務(wù)的業(yè)務(wù)消息的發(fā)送端在向服務(wù)器的第三業(yè)務(wù)的消息隊(duì)列10發(fā)送業(yè)務(wù)消息之后,將下一個(gè)業(yè)務(wù)消息發(fā)送至第三業(yè)務(wù)的消息隊(duì)列11,以實(shí)現(xiàn)基于輪詢方式的業(yè)務(wù)消息的發(fā)送。
需要說明的是,服務(wù)器側(cè)的某一個(gè)業(yè)務(wù)的消息隊(duì)列的個(gè)數(shù)發(fā)生變更時(shí),服務(wù)器將該業(yè)務(wù)變更后消息隊(duì)列發(fā)送給消息中間件中的控制端,控制端接收到變更后的消息隊(duì)列之后,將該變更后的消息隊(duì)列發(fā)送給發(fā)送端,使得發(fā)送端能夠基于變更后的消息隊(duì)列重新確定其向服務(wù)器發(fā)送業(yè)務(wù)消息的發(fā)送順序。
在本發(fā)明實(shí)施例中,在建立所述第二消息隊(duì)列與所述第二接收端之間一一對(duì)應(yīng)的映射關(guān)系之后,指令發(fā)送模塊605向關(guān)注第三業(yè)務(wù)的所有接收端發(fā)送重分配指令,關(guān)注該第三業(yè)務(wù)的接收端接收到該重分配指令之后,將基于預(yù)先設(shè)置的統(tǒng)一的分配算法確定重新分配后的消息隊(duì)列,并將重新分配后的消息隊(duì)列反饋給服務(wù)器。
服務(wù)器在接收到關(guān)注第三業(yè)務(wù)的所有接收端反饋的重新分配后的消息隊(duì)列之后,將由更新模塊606更新關(guān)注該第三業(yè)務(wù)的接收端與第三業(yè)務(wù)的消息對(duì)之間一一對(duì)應(yīng)的映射關(guān)系。
在本發(fā)明實(shí)施例中,服務(wù)器接收到第二接收端發(fā)送的業(yè)務(wù)關(guān)注請(qǐng)求后,將創(chuàng)建屬于該第二接收端請(qǐng)求關(guān)注的第三業(yè)務(wù)的第二消息隊(duì)列,并建立該第二消息隊(duì)列與該第二接收端之間的一一對(duì)應(yīng)的映射關(guān)系,使得在在第二接收端請(qǐng)求第三業(yè)務(wù)的業(yè)務(wù)消息時(shí),服務(wù)器可以將該第二消息隊(duì)列中的業(yè)務(wù)消息發(fā)送給該第二接收端,有效實(shí)現(xiàn)消息的分發(fā)。且在建立第二消息隊(duì)列與第二接收端之間的一一對(duì)應(yīng)的映射關(guān)系之后,服務(wù)器將向關(guān)注該第三業(yè)務(wù)的所有接收端發(fā)送重分配指令,并基于接收端反饋的重新分配后的消息隊(duì)列更新該第三業(yè)務(wù)的接收端與消息隊(duì)列之間一一對(duì)應(yīng)的映射關(guān)系,有效實(shí)現(xiàn)接收端從服務(wù)器拉取的業(yè)務(wù)消息是均衡的。
通過以上的實(shí)施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到上述實(shí)施例方法可借助軟件加必需的通用硬件平臺(tái)的方式來實(shí)現(xiàn),當(dāng)然也可以通過硬件,但很多情況下前者是更佳的實(shí)施方式。基于這樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計(jì)算機(jī)軟件產(chǎn)品存儲(chǔ)在一個(gè)存儲(chǔ)介質(zhì)(如ROM/RAM、磁碟、光盤)中,包括若干指令用以使得一臺(tái)終端設(shè)備(可以是手機(jī),計(jì)算機(jī),服務(wù)器,空調(diào)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個(gè)實(shí)施例的方法。
以上僅為本發(fā)明的優(yōu)選實(shí)施例,并非因此限制本發(fā)明的專利范圍,凡是利用本發(fā)明說明書及附圖內(nèi)容所作的等效結(jié)構(gòu)或等效流程變換,或直接或間接運(yùn)用在其他相關(guān)的技術(shù)領(lǐng)域,均同理包括在本發(fā)明的專利保護(hù)范圍內(nèi)。