r>[0033]圖2是現(xiàn)有技術(shù)的低延時(shí)的消息分發(fā)系統(tǒng)的構(gòu)架示意圖;
[0034]圖3是根據(jù)本發(fā)明實(shí)施例的消息分發(fā)的方法的主要步驟示意圖;
[0035]圖4是根據(jù)本發(fā)明實(shí)施例的消息分發(fā)的裝置的主要模塊示意圖;
[0036]圖5是根據(jù)本發(fā)明實(shí)施例的消息分發(fā)系統(tǒng)構(gòu)架示意圖;
[0037]圖6是根據(jù)本發(fā)明實(shí)施例的消息分發(fā)系統(tǒng)中消息對(duì)象按照時(shí)間分組的示意圖。
【具體實(shí)施方式】
[0038]以下結(jié)合附圖對(duì)本發(fā)明的示范性實(shí)施例做出說(shuō)明,其中包括本發(fā)明實(shí)施例的各種細(xì)節(jié)以助于理解,應(yīng)當(dāng)將它們認(rèn)為僅僅是示范性的。因此,本領(lǐng)域普通技術(shù)人員應(yīng)當(dāng)認(rèn)識(shí)至IJ,可以對(duì)這里描述的實(shí)施例做出各種改變和修改,而不會(huì)背離本發(fā)明的范圍和精神。同樣,為了清楚和簡(jiǎn)明,以下的描述中省略了對(duì)公知功能和結(jié)構(gòu)的描述。
[0039]圖3是根據(jù)本發(fā)明實(shí)施例的消息分發(fā)的方法的主要步驟示意圖。
[0040]如圖3所示,本實(shí)施例的消息分發(fā)的方法主要包括如下的步驟Sll至步驟S13。
[0041]步驟Sll:消息生產(chǎn)者與消息消費(fèi)者根據(jù)消息分發(fā)服務(wù)地址建立消息傳輸通道。
[0042]根據(jù)本發(fā)明的實(shí)施例,上述步驟Sll具體可以包括:
[0043]消息生產(chǎn)者將分發(fā)服務(wù)地址發(fā)送到消息傳輸模塊;
[0044]消息消費(fèi)者從消息傳輸模塊查找到分發(fā)服務(wù)地址,并根據(jù)分發(fā)服務(wù)地址與消息生產(chǎn)者建立消息傳輸通道。
[0045]步驟S12:消息生產(chǎn)者將生產(chǎn)的消息按照預(yù)定的時(shí)間間隔進(jìn)行分組,并按照各消息組的創(chuàng)建順序?qū)⑾⒔M通過(guò)消息傳輸通道發(fā)送給消息消費(fèi)者。
[0046]根據(jù)本發(fā)明的實(shí)施例,上述步驟S12中,消息生產(chǎn)者將生產(chǎn)的消息按照預(yù)定的時(shí)間間隔進(jìn)行分組的步驟,具體可以包括:
[0047]根據(jù)消息生產(chǎn)的當(dāng)前時(shí)間和預(yù)定的時(shí)間間隔計(jì)算時(shí)間標(biāo)識(shí);
[0048]根據(jù)預(yù)定的時(shí)間間隔內(nèi)消息生產(chǎn)的先后順序?qū)ο⑦M(jìn)行排序,并給出對(duì)應(yīng)的序列號(hào);
[0049]對(duì)生產(chǎn)的消息創(chuàng)建新的消息對(duì)象,新的消息對(duì)象包括時(shí)間標(biāo)識(shí)、序列號(hào)和消息的內(nèi)容;
[0050]對(duì)新的消息對(duì)象按照預(yù)定的時(shí)間間隔進(jìn)行分組。
[0051]根據(jù)本發(fā)明的實(shí)施例,上述步驟S12中,將消息組通過(guò)消息傳輸通道發(fā)送給消息消費(fèi)者的步驟,具體可以包括:
[0052]對(duì)消息組進(jìn)行壓縮,并創(chuàng)建壓縮消息對(duì)象;
[0053]將壓縮消息對(duì)象通過(guò)消息傳輸通道發(fā)送給消息消費(fèi)者。
[0054]步驟S13:消息消費(fèi)者接收消息組并讀取消息組中的消息,并按照消息生產(chǎn)的先后順序依次消費(fèi)讀取的消息。
[0055]根據(jù)本發(fā)明的實(shí)施例,上述步驟S13中,消息消費(fèi)者接收所述消息組的步驟,還可以包括:
[0056]消息消費(fèi)者對(duì)接收的消息壓縮對(duì)象進(jìn)行解壓縮,得到消息組。
[0057]根據(jù)本發(fā)明的實(shí)施例,上述步驟S13中,按照消息生產(chǎn)的先后順序依次消費(fèi)讀取的消息的步驟之前,還可以包括:
[0058]消息消費(fèi)者對(duì)讀取的消息進(jìn)行格式校驗(yàn),并刪除其中不完整的消息。
[0059]圖4是根據(jù)本發(fā)明實(shí)施例的消息分發(fā)的裝置的主要模塊示意圖。
[0060]如圖4所示,本發(fā)明實(shí)施例的消息分發(fā)的裝置40主要包括:消息傳輸模塊41、消息發(fā)送模塊42和消息接收模塊43。
[0061]消息傳輸模塊41用于消息生產(chǎn)者與消息消費(fèi)者根據(jù)消息分發(fā)服務(wù)地址建立消息傳輸通道;消息發(fā)送模塊42用于消息生產(chǎn)者將生產(chǎn)的消息按照預(yù)定的時(shí)間間隔進(jìn)行分組,并按照各消息組的創(chuàng)建順序?qū)⑾⒔M通過(guò)消息傳輸通道發(fā)送給消息消費(fèi)者;消息接收模塊43用于消息消費(fèi)者接收消息組并讀取消息組中的消息,并按照消息生產(chǎn)的先后順序依次消費(fèi)讀取的消息。
[0062]根據(jù)本發(fā)明的實(shí)施例,消息傳輸模塊41還可以用于接收消息生產(chǎn)者發(fā)送來(lái)的分發(fā)服務(wù)地址;以及消息消費(fèi)者從消息傳輸模塊查找分發(fā)服務(wù)地址,并根據(jù)分發(fā)服務(wù)地址與消息生產(chǎn)者建立消息傳輸通道。
[0063]消息發(fā)送模塊42還可以用于根據(jù)消息生產(chǎn)的當(dāng)前時(shí)間和預(yù)定的時(shí)間間隔計(jì)算時(shí)間標(biāo)識(shí);根據(jù)預(yù)定的時(shí)間間隔內(nèi)消息生產(chǎn)的先后順序?qū)ο⑦M(jìn)行排序,并給出對(duì)應(yīng)的序列號(hào);對(duì)生產(chǎn)的消息創(chuàng)建新的消息對(duì)象,新的消息對(duì)象包括時(shí)間標(biāo)識(shí)、序列號(hào)和消息的內(nèi)容;對(duì)新的消息對(duì)象按照預(yù)定的時(shí)間間隔進(jìn)行分組。
[0064]消息發(fā)送模塊42還可以用于對(duì)消息組進(jìn)行壓縮,并創(chuàng)建壓縮消息對(duì)象;將壓縮消息對(duì)象通過(guò)消息傳輸通道發(fā)送給消息消費(fèi)者。
[0065]消息接收模塊43還可以用于對(duì)接收的消息壓縮對(duì)象進(jìn)行解壓縮,得到消息組。
[0066]消息接收模塊43還可以用于對(duì)讀取的消息進(jìn)行格式校驗(yàn),并刪除其中不完整的消息。
[0067]圖5是根據(jù)本發(fā)明實(shí)施例的消息分發(fā)系統(tǒng)構(gòu)架示意圖。
[0068]如圖5所示,本發(fā)明實(shí)施例的消息分發(fā)系統(tǒng)主要包括:消息生產(chǎn)者50、消息分發(fā)裝置51、消息消費(fèi)者52,其中:消息生產(chǎn)者50為用于生產(chǎn)消息的裝置;消息消費(fèi)者52為用于消費(fèi)消息的裝置;消息分發(fā)裝置51主要包括位于消息生產(chǎn)者端的消息發(fā)送模塊54、位于消息消費(fèi)者端的消息接收模塊55,以及位于消息生產(chǎn)者和消息消費(fèi)者之間的消息傳輸模塊53,消息分發(fā)裝置51用于將消息生產(chǎn)者生產(chǎn)的消息分發(fā)到消息消費(fèi)者以便消費(fèi)。
[0069]具體地,消息分發(fā)裝置中,消息發(fā)送模塊主要用于將消息生產(chǎn)者生產(chǎn)的消息進(jìn)行發(fā)送,根據(jù)功能實(shí)現(xiàn)的需要,其主要包括消息分發(fā)器、時(shí)間分組組件、消息壓縮組件、消息傳輸組件等幾部分。
[0070]其中,消息分發(fā)器用于接收消息發(fā)送模塊發(fā)送來(lái)的消息Msg,并根據(jù)該消息生產(chǎn)的當(dāng)前時(shí)間和預(yù)定的時(shí)間間隔計(jì)算時(shí)間標(biāo)識(shí)Ti(i為O至N的任意整數(shù)),并根據(jù)該預(yù)定的時(shí)間間隔內(nèi)消息生產(chǎn)的先后順序?qū)ο⑦M(jìn)行排序,并給出對(duì)應(yīng)的序列號(hào),其中,預(yù)定的時(shí)間間隔可根據(jù)消息傳輸所需要的吞吐量的大小來(lái)設(shè)置,例如,可以設(shè)置該時(shí)間間隔為I秒、100毫秒或其他數(shù)值。如果時(shí)間間隔設(shè)置為I秒,且消息生產(chǎn)的當(dāng)前時(shí)間為2015年10月10日上午8點(diǎn)36分53秒,共接收了兩條消息MsgA和MsgB,那么該MsgA和MsgB的時(shí)間標(biāo)識(shí)(例如記為T(mén)O)為“20151010083653”,其中,MsgA的序列號(hào)為I,MsgB的序列號(hào)為2。消息分發(fā)器根據(jù)上述時(shí)間標(biāo)識(shí)和消息的序列號(hào)對(duì)接收的消息創(chuàng)建新的消息對(duì)象,該消息對(duì)象的形式例如為:Msg_W(TO,SEQO,Msg ),其中,TO為時(shí)間標(biāo)識(shí),SEQO為消息的序列號(hào),Msg指示消息的內(nèi)容。
[0071]時(shí)間分組組件用于將消息分發(fā)器創(chuàng)建的消息對(duì)象Msg_W按照時(shí)間標(biāo)識(shí)進(jìn)行分組,形成消息組(MsgGroup),并將該消息組存入緩沖區(qū)。圖6示出了本發(fā)明實(shí)施例的消息分發(fā)系統(tǒng)中消息對(duì)象1叩_1按照時(shí)間分組的示意圖,其中,將時(shí)間標(biāo)識(shí)TO?TN作為各個(gè)消息組的時(shí)間分組名。
[0072]消息壓縮組件用于從緩沖區(qū)中取出消息組(MsgGroup),并采用壓縮算法對(duì)消息組進(jìn)行壓縮,然后創(chuàng)建壓縮消息對(duì)象MsgPkg。其中,壓縮算法采用通用的無(wú)損壓縮算法即可,例如采用snappy,lz77,RLERLE等支持完整壓縮或解壓縮的算法,該創(chuàng)建的壓縮消息對(duì)象為二進(jìn)制串(BinArray)的形式,壓縮消息對(duì)象MsgPkg的格式為MsgPkg(TO ,BinArray),T0即時(shí)間分組名。
[0073]消息傳輸組件用于執(zhí)行實(shí)際的消息發(fā)送,其負(fù)責(zé)將二進(jìn)制串形式的壓縮消息對(duì)象MsgPkg按照各消息組的創(chuàng)建順序,通過(guò)消息傳輸通道傳輸給位于消息消費(fèi)者端的消息接收豐旲塊。
[0074]如上所述,消息發(fā)送模塊通過(guò)對(duì)消息生產(chǎn)者生產(chǎn)的消息進(jìn)行時(shí)間分組、壓縮等處理,可以大量減少傳輸?shù)拇螖?shù),降低了網(wǎng)絡(luò)資源損耗;同時(shí),還減少了傳輸?shù)淖止?jié)數(shù),用較少的時(shí)效損失,即可換取成倍的分發(fā)效率,從而提高了傳輸效率。
[0075]消息分發(fā)裝置中,消息接收模塊主要用于接收消息發(fā)送模塊發(fā)來(lái)的消息并供消息消費(fèi)者進(jìn)行消費(fèi),其主要包括消息接收組件、消息解壓縮組件、消息拆分組件和消息接收器。
[0076]其中,消息接收組件用于執(zhí)行實(shí)際的消息接收,其負(fù)責(zé)接收消息發(fā)送模塊發(fā)來(lái)的二進(jìn)制形式的壓縮消息對(duì)象MsgPkg。
[0077]消息解壓縮組件用于將二進(jìn)制形式的壓縮消息對(duì)象MsgPkg解壓縮,還原為消息組(MsgGroup)的形式。
[0078]消息拆分組件用于將消息組形式的消息拆分為消息分組之前各條消息的形式,主要通過(guò)從消息組中識(shí)別消息對(duì)象Msg_W列表,根據(jù)時(shí)間分組名查找出消息組,并根據(jù)消息組中每條消息的序列號(hào)對(duì)消息組中的各條消息重新排序,以保證消息接收模塊所接收的消息與消息發(fā)送模塊所發(fā)送的消息Msg的正文和邏輯順序一致。
[0079]消息接收器用于對(duì)重新排序后的消息進(jìn)行格式校驗(yàn),主要是校驗(yàn)消息格式的完整性,校驗(yàn)算法例如采用MD5等算法,通過(guò)簽名的方式確保消息完整。完成消息