国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種基于Kafka消息中間件的雙向通信系統(tǒng)及方法與流程

      文檔序號(hào):12363216閱讀:2959來源:國知局
      一種基于Kafka消息中間件的雙向通信系統(tǒng)及方法與流程

      本發(fā)明屬于分布式系統(tǒng)節(jié)點(diǎn)間通信技術(shù)領(lǐng)域,更具體地,涉及一種基于Kafka消息中間件的雙向通信系統(tǒng)及方法。



      背景技術(shù):

      消息中間件是一種廣泛運(yùn)用在分布式系統(tǒng)中的用于節(jié)點(diǎn)間通信的軟件。Kafka是由LinkedIn公司開發(fā)并開源的消息中間件。Kafka消息中間件主要由生產(chǎn)者、代理者和消費(fèi)者組成,生產(chǎn)者發(fā)布消息,代理者將消息從生產(chǎn)者轉(zhuǎn)發(fā)到消費(fèi)者,消費(fèi)者接收并處理消息。在實(shí)際運(yùn)用中,一般會(huì)將多個(gè)Kafka代理者以集群的方式運(yùn)行形成Kafka集群。Kafka提供一種特殊的發(fā)布/訂閱模式。在傳統(tǒng)的發(fā)布/訂閱模式中,生產(chǎn)者向某個(gè)消息主題發(fā)布消息,訂閱者則向代理者訂閱并獲取某個(gè)主題下的消息。在Kafka消息中間件技術(shù)中,主題是指Kafka集群維護(hù)的按照不同分類進(jìn)行區(qū)分的消息流。Kafka對主題進(jìn)行了分區(qū),Kafka消息是具有鍵和值的消息,具有相同的鍵的消息會(huì)進(jìn)入到同一個(gè)分區(qū),同一個(gè)分區(qū)的消息會(huì)發(fā)送到相同的消費(fèi)者。這樣具有相同鍵的消息、主題分區(qū)和消費(fèi)者會(huì)有一定的映射關(guān)系。

      在這種消息轉(zhuǎn)發(fā)模式下,Kafka只支持單向的消息轉(zhuǎn)發(fā),不能直接支持反方向的消息轉(zhuǎn)發(fā),因此在某些需要反方向通信的環(huán)境中,如工業(yè)現(xiàn)場監(jiān)控、智能家居等應(yīng)用場景,Kafka則不能完全滿足數(shù)據(jù)采集與控制的需求。



      技術(shù)實(shí)現(xiàn)要素:

      針對現(xiàn)有技術(shù)的以上缺陷或改進(jìn)需求,本發(fā)明提供了一種基于Kafka消息中間件的雙向通信系統(tǒng)及方法,其目的在于解決現(xiàn)有Kafka不能支持反方向消息轉(zhuǎn)發(fā)的問題。

      為實(shí)現(xiàn)上述目的,按照本發(fā)明的一個(gè)方面,提供了一種基于Kafka消息中間件的雙向通信系統(tǒng),該系統(tǒng)包括發(fā)布者、訂閱者、Kafka集群以及數(shù)據(jù)庫;

      其中,發(fā)布者和訂閱者均包含Kafka生產(chǎn)者和Kafka消費(fèi)者,且均具有向Kafka集群發(fā)布和從Kafka集群接收消息的能力;

      其中,發(fā)布者用于與消息流進(jìn)行通信、向Kafka集群發(fā)布上傳消息、從Kafka集群接收下發(fā)消息;訂閱者用于與其他應(yīng)用程序通信,獲取或者生成下發(fā)消息、向Kafka集群發(fā)布下發(fā)消息、從Kafka集群接收上傳消息;數(shù)據(jù)庫用于存儲(chǔ)消息流標(biāo)識(shí)與發(fā)布者標(biāo)識(shí)之間的映射關(guān)系。

      優(yōu)選的,上述的雙向通信系統(tǒng),采用Redis分布式內(nèi)存數(shù)據(jù)庫存儲(chǔ)上述映射關(guān)系,以提高短時(shí)大量查詢的訪問效率。

      優(yōu)選的,上述的雙向通信系統(tǒng),訂閱者中具有一張維護(hù)消息流標(biāo)識(shí)與發(fā)布者標(biāo)識(shí)之間映射關(guān)系的消息流發(fā)布者Hash表、一張發(fā)布者標(biāo)識(shí)與發(fā)布者主題之間映射關(guān)系的發(fā)布者主題Hash表;其中,發(fā)布者、發(fā)布者標(biāo)識(shí)和發(fā)布者主題具有一一對應(yīng)的關(guān)系且全局唯一;

      發(fā)布者中具有一張維護(hù)消息流標(biāo)識(shí)與外部消息流映射關(guān)系的消息流標(biāo)識(shí)Hash表;

      上傳消息是指從發(fā)布者發(fā)送到訂閱者的消息;

      下發(fā)消息是指從訂閱者發(fā)送到發(fā)布者的消息;

      發(fā)布者主題是指發(fā)布者需要訂閱的主題并從該主題下接受下發(fā)消息;

      訂閱者主題是指訂閱者需要訂閱的主題并從該主題下接受上傳消息;

      外部消息流是指外部數(shù)據(jù)源按照任意網(wǎng)絡(luò)通信方式提供的包含任意格式和類型數(shù)據(jù)的消息序列。

      為實(shí)現(xiàn)本發(fā)明目的,按照本發(fā)明的另一個(gè)方面,基于上述的雙向通信系統(tǒng),提供了一種基于Kafka消息中間件的雙向通信方法,包括發(fā)布者處理過程和訂閱者處理過程;

      其中,發(fā)布者處理過程包括以下步驟:

      (a1)發(fā)布者從配置文件中獲取相關(guān)配置,包括發(fā)布者主題、用于上傳消息的訂閱者主題、發(fā)布者標(biāo)識(shí);對消息流標(biāo)識(shí)Hash表進(jìn)行初始化處理,從Kafka集群訂閱發(fā)布者主題;

      (a2)當(dāng)外部消息流中有消息需要上傳時(shí),發(fā)布者從外部消息流中獲取上傳信息;

      以該上傳消息為基礎(chǔ)構(gòu)建Kafka消息,并將此Kafka消息發(fā)布到Kafka集群中當(dāng)前發(fā)布者上傳消息的訂閱者主題下;

      (a3)當(dāng)發(fā)布者從Kafka集群接收到需要下發(fā)的Kafka消息,解析Kafka消息取出擬下發(fā)的消息,將擬下發(fā)的消息發(fā)送到指定的外部消息流;

      其中,訂閱者處理過程包括以下步驟:

      (b1)訂閱者從配置文件中讀取相關(guān)配置,包括訂閱者主題、發(fā)布者標(biāo)識(shí)與發(fā)布者主題的映射關(guān)系;消息流發(fā)布者Hash表和消息流主題Hash表進(jìn)行初始化處理,并從Kafka集群訂閱訂閱者主題;

      (b2)當(dāng)訂閱者從Kafka集群接收到擬上傳的Kafka消息,根據(jù)Kafka消息更新消息流標(biāo)識(shí)與發(fā)布者標(biāo)識(shí)之間的映射關(guān)系,從Kafka消息中將抽取應(yīng)用層消息,并發(fā)送到第三方應(yīng)用程序;

      (b3)當(dāng)訂閱者自身產(chǎn)生擬下發(fā)消息或者收到第三方應(yīng)用程序的擬下發(fā)信息時(shí),訂閱者以所述擬下發(fā)消息為基礎(chǔ)構(gòu)建Kafka消息,并將Kafka消息發(fā)布到Kafka集群的主題下。

      優(yōu)選地,上述的雙向通信方法,其步驟(a2)包括以下子步驟:

      (a2.1)從外部消息流獲取需要上傳的消息;

      (a2.2)在發(fā)布者標(biāo)識(shí)與消息流標(biāo)識(shí)之間添加分隔符,并按字符串相連接的方式組合構(gòu)成Kafka消息的鍵,以從外部消息流獲取的上傳消息的內(nèi)容構(gòu)成Kafka消息的值,并發(fā)布到用于上傳消息的訂閱者主題;

      (a2.3)判斷是否有新的外部消息流加入到發(fā)布者,若是,則進(jìn)入步驟(a2.4);若否,則進(jìn)入步驟(a2.1);

      (a2.4)生成一個(gè)隨機(jī)數(shù)作為新的外部消息流的消息流標(biāo)識(shí);

      (a2.5)判斷步驟(a2.4)中生成的新的消息流標(biāo)識(shí)是否已經(jīng)存在于消息流標(biāo)識(shí)Hash表中,若是,則進(jìn)入步驟(a2.4);若否,則進(jìn)入步驟(a2.6);

      (a2.6)將新的消息流標(biāo)識(shí)與外部消息流的映射關(guān)系插入到消息流標(biāo)識(shí)Hash表中,進(jìn)入步驟(a2.1)。

      優(yōu)選地,上述的雙向通信方法,其步驟(a3)包括以下子步驟:

      (a3.1)從Kafka集群獲取Kafka消息;

      (a3.2)獲取所述Kafka消息的消息流標(biāo)識(shí),并以所述消息流標(biāo)識(shí)為鍵在消息流標(biāo)識(shí)Hash表中查找外部消息流映射值;

      (a3.3)獲取Kafka消息的值;并根據(jù)上述外部消息流映射值確定外部消息流,將Kafka消息的值發(fā)送給上述外部消息流,并進(jìn)入步驟(a3.1)。

      優(yōu)選地,上述的雙向通信方法,其步驟(b2)包括以下子步驟:

      (b2.1)從Kafka集群獲取需要上傳的Kafka消息;

      (b2.2)以分隔符為分割標(biāo)志、以字符串拆分的方式分割Kafka消息的鍵,以獲得消息流標(biāo)識(shí)和發(fā)布者標(biāo)識(shí);

      (b2.3)以消息流標(biāo)識(shí)為鍵在消息流發(fā)布者Hash表中查找發(fā)布者標(biāo)識(shí),若沒有查找到發(fā)布者標(biāo)識(shí)映射值,則進(jìn)入步驟(b2.4),否則進(jìn)入步驟(b2.5);

      (b2.4)將消息流標(biāo)識(shí)與發(fā)布者標(biāo)識(shí)的映射關(guān)系插入到消息流發(fā)布者Hash表中,并進(jìn)入步驟(b2.8);

      (b2.5)將步驟(b2.2)中獲得的發(fā)布者標(biāo)識(shí)和步驟(b2.3)中查找到的發(fā)布者標(biāo)識(shí)進(jìn)行比較;若兩者的值不同,則進(jìn)入步驟(b2.6),否則進(jìn)入步驟(b2.7);

      (b2.6)根據(jù)步驟(b2.2)中獲得的消息流標(biāo)識(shí)和發(fā)布者標(biāo)識(shí)的映射關(guān)系,更新消息流發(fā)布者Hash表,并進(jìn)入到步驟(b2.8);

      (b2.7)將步驟(b2.1)中獲取的Kafka消息的值,即需要上傳的消息,和步驟(b2.2)中獲得的消息流標(biāo)識(shí)發(fā)送給消息處理程序,并進(jìn)入步驟(b2.1);

      (b2.8)在數(shù)據(jù)庫中更新消息流標(biāo)識(shí)與發(fā)布者標(biāo)識(shí)之間的映射關(guān)系,并進(jìn)入步驟(b2.7)。

      優(yōu)選地,上述的雙向通信方法,其步驟(b3)包括以下子步驟:

      (b3.1)接收消息處理應(yīng)用層下發(fā)的消息和消息流標(biāo)識(shí);

      (b3.2)以消息流標(biāo)識(shí)為鍵,在消息流發(fā)布者Hash表中查找發(fā)布者標(biāo)識(shí)映射值;若查找到,進(jìn)入步驟(b3.3);否則,進(jìn)入步驟(b3.4);

      (b3.3)以查找到的發(fā)布者標(biāo)識(shí)的映射值為鍵,在發(fā)布者主題Hash表中查找發(fā)布者主題映射值;若查找到,則進(jìn)入步驟(b3.5);否則,進(jìn)入步驟(b3.4);

      (b3.4)向用戶反饋消息下發(fā)失敗,進(jìn)入步驟(b3.1);

      (b3.5)以步驟(b3.1)接收到的消息流標(biāo)識(shí)為鍵,以消息內(nèi)容為值構(gòu)建Kafka消息,并將該Kafka消息發(fā)布到步驟(b3.3)中查找到的發(fā)布者主題映射值中,進(jìn)入步驟(b3.1)。

      總體而言,通過本發(fā)明所構(gòu)思的以上技術(shù)方案與現(xiàn)有技術(shù)相比,能夠取得下列有益效果:

      (1)本發(fā)明所提出的基于Kafka消息中間件的雙向通信系統(tǒng)及方法,由于對發(fā)布者、訂閱者與任意方向消息流的映射關(guān)系采用分布式存儲(chǔ)機(jī)制,因此極大地沿襲了Kafka消息中間件的分布式處理能力,并具備海量實(shí)時(shí)通信能力;

      (2)本發(fā)明所提出的基于Kafka消息中間件的雙向通信系統(tǒng)及方法,通過建立發(fā)布者、訂閱者與消息流的映射關(guān)系,在消息訂閱者中維護(hù)了消息流標(biāo)識(shí)與發(fā)布者的映射關(guān)系、以及發(fā)布者與發(fā)布者主題之間的映射關(guān)系,實(shí)現(xiàn)了基于Kafka消息中間件的雙向通信,解決了現(xiàn)有Kafka消息中間件不支持反方向消息轉(zhuǎn)發(fā)的問題;

      相比于現(xiàn)有技術(shù)而言,本發(fā)明提出的基于Kafka消息中間件的雙向通信具備分布式處理、高吞吐量、高可靠性等優(yōu)勢,并且可以支持任意應(yīng)用接入、處理任意類型通信協(xié)議;本發(fā)明提供的這種系統(tǒng)及方法可應(yīng)用于某些需要反方向通信的環(huán)境,譬如工業(yè)現(xiàn)場監(jiān)控、智能家居等應(yīng)用場景,進(jìn)行雙向的數(shù)據(jù)采集與控制。

      附圖說明

      圖1是本發(fā)明實(shí)施例中的基于Kafka消息中間件的雙向通信系統(tǒng)的系統(tǒng)結(jié)構(gòu)示意圖;

      圖2是本發(fā)明實(shí)施例中發(fā)布者初始化流程示意圖;

      圖3是本發(fā)明實(shí)施例中發(fā)布者消息上傳流程示意圖;

      圖4是本發(fā)明實(shí)施例中發(fā)布者消息下發(fā)流程示意圖;

      圖5是本發(fā)明實(shí)施例中訂閱者初始化流程示意圖;

      圖6是本發(fā)明實(shí)施例中訂閱者消息上傳流程示意圖;

      圖7是本發(fā)明實(shí)施例中訂閱者消息下發(fā)流程示意圖。

      具體實(shí)施方式

      為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。此外,下面所描述的本發(fā)明各個(gè)實(shí)施方式中所涉及到的技術(shù)特征只要彼此之間未構(gòu)成沖突就可以相互組合。

      本發(fā)明的核心在于充分利用Kafka消息中間件的主題和主題分區(qū),將發(fā)布者主題與發(fā)布者相關(guān)聯(lián),以使訂閱者能夠精準(zhǔn)地將消息發(fā)送到相應(yīng)的發(fā)布者。

      如圖1所示,是基于Kafka消息中間件的雙向通信系統(tǒng)的系統(tǒng)結(jié)構(gòu)示意圖,該系統(tǒng)包括發(fā)布者、訂閱者、Kafka集群以及數(shù)據(jù)庫;發(fā)布者和訂閱者都包含了Kafka生產(chǎn)者和Kafka消費(fèi)者,兩者都具有向Kafka集群發(fā)布和從Kafka集群接收消息的能力;

      其中,發(fā)布者的功能包括:與消息流進(jìn)行通信、向Kafka集群發(fā)布上傳消息和從Kafka集群接收下發(fā)消息;訂閱者的功能包括:與其他應(yīng)用程序通信獲取或者產(chǎn)生下發(fā)消息、向Kafka集群發(fā)布下發(fā)消息和從Kafka集群接收上傳消息。

      數(shù)據(jù)庫用于保存所有的消息流標(biāo)識(shí)和發(fā)布者標(biāo)識(shí)的映射關(guān)系;實(shí)施例中,使用Redis分布式內(nèi)存數(shù)據(jù)庫來存儲(chǔ)該映射關(guān)系;Redis分布式內(nèi)存數(shù)據(jù)庫在本發(fā)明這種短時(shí)大量的查詢場景中具有極高的訪問效率;訂閱者中具有一張維護(hù)消息流標(biāo)識(shí)到發(fā)布者標(biāo)識(shí)映射關(guān)系的消息流發(fā)布者Hash表、發(fā)布者標(biāo)識(shí)到發(fā)布者主題映射關(guān)系的發(fā)布者主題Hash表;發(fā)布者、發(fā)布者標(biāo)識(shí)和發(fā)布者主題具有一一對應(yīng)的關(guān)系且全局唯一;發(fā)布者具有維護(hù)消息流標(biāo)識(shí)到外部消息流映射關(guān)系的消息流標(biāo)識(shí)Hash表。

      實(shí)施例中,基于上述的雙向通信系統(tǒng),提供的基于Kafka消息中間件的雙向通信方法,包括發(fā)布者處理過程和訂閱者處理過程;

      其中,發(fā)布者處理過程包括以下步驟:

      (a1)發(fā)布者初始化:發(fā)布者從配置文件中獲取相關(guān)配置,包括發(fā)布者主題、用于上傳消息的訂閱者主題、發(fā)布者標(biāo)識(shí);對消息流標(biāo)識(shí)Hash表進(jìn)行初始化處理,從Kafka集群訂閱發(fā)布者主題;

      實(shí)施例中,相關(guān)配置包括發(fā)布者主題、擬發(fā)布消息的主題、發(fā)布者標(biāo)識(shí),以及Kafka集群IP地址;

      (a2)發(fā)布者消息上傳:當(dāng)外部消息流中有消息需要上傳時(shí),發(fā)布者從外部消息流中獲取上傳信息;

      以該上傳消息為基礎(chǔ)構(gòu)建Kafka消息,并將此Kafka消息發(fā)布到Kafka集群中當(dāng)前發(fā)布者上傳消息的訂閱者主題下;

      (a3)發(fā)布者消息下發(fā):當(dāng)發(fā)布者從Kafka集群接收到需要下發(fā)的Kafka消息,解析Kafka消息取出擬下發(fā)的消息,將擬下發(fā)的消息發(fā)送到指定的外部消息流;

      其中,訂閱者處理過程包括以下步驟:

      (b1)訂閱者初始化:訂閱者從配置文件中讀取相關(guān)配置,包括訂閱者主題、發(fā)布者標(biāo)識(shí)與發(fā)布者主題的映射關(guān)系;消息流發(fā)布者Hash表和消息流主題Hash表進(jìn)行初始化處理,并從Kafka集群訂閱訂閱者主題;

      (b2)訂閱者消息上傳:當(dāng)訂閱者從Kafka集群接收到擬上傳的Kafka消息,根據(jù)Kafka消息更新消息流標(biāo)識(shí)與發(fā)布者標(biāo)識(shí)之間的映射關(guān)系,從Kafka消息中將抽取應(yīng)用層消息,并發(fā)送給第三方應(yīng)用程序進(jìn)行處理;

      (b3)訂閱者消息下發(fā):當(dāng)訂閱者收到其他程序需要下發(fā)的信息或者產(chǎn)生需要下發(fā)的消息時(shí),訂閱者以下發(fā)消息為基礎(chǔ)構(gòu)建Kafka消息,并將Kafka消息發(fā)布到Kafka集群相應(yīng)的主題下。

      圖2所示,是實(shí)施例中步驟(a1)的發(fā)布者初始化的流程示意圖,具體包括如下的步驟:

      S201,從配置文件讀取發(fā)布者主題、用于上傳消息的訂閱者主題和發(fā)布者標(biāo)識(shí);

      S202,初始化一張維護(hù)從消息流標(biāo)識(shí)到外部消息流映射關(guān)系的消息流標(biāo)識(shí)Hash表;

      S203,從Kafka集群訂閱發(fā)布者主題;

      S204,啟動(dòng)用于執(zhí)行消息上傳流程的線程;

      S205,啟動(dòng)用于執(zhí)行消息下發(fā)流程的線程。

      圖3所示,是實(shí)施例中步驟(a2)的發(fā)布者消息上傳流程的示意圖,具體包括如下的步驟:

      S301,從外部消息流獲取一條需要上傳的消息;

      S302,在發(fā)布者標(biāo)識(shí)和消息流標(biāo)識(shí)之間添加“:”字符并按字符串相連接的方式組合起來構(gòu)成Kafka消息的鍵,以步驟S301中從外部消息流獲取的上傳消息的內(nèi)容構(gòu)成Kafka消息的值,并發(fā)布到用于上傳消息的訂閱者主題;

      S303,判斷是否有新的外部消息流加入到發(fā)布者,若是,則進(jìn)入步驟S304;若否,則進(jìn)入步驟S301;

      S304,生成一個(gè)隨機(jī)數(shù)作為新的外部消息流的消息流標(biāo)識(shí);

      S305,判斷步驟S304中生成的新的消息流標(biāo)識(shí)是否已經(jīng)存在于消息流標(biāo)識(shí)Hash表中,若是,則進(jìn)入步驟S304;若否,則進(jìn)入步驟S306;

      S306,將新的消息流標(biāo)識(shí)和外部消息流的映射關(guān)系插入到消息流標(biāo)識(shí)Hash表中,并進(jìn)入步驟S301。

      圖4所示,是實(shí)施例中步驟(a3)的發(fā)布者消息下發(fā)流程的示意圖,具體包括如下的步驟:

      S401,從Kafka集群獲取Kafka消息;

      S402,取出步驟S401中獲取的Kafka消息的鍵,Kafka消息的鍵即是消息流標(biāo)識(shí),以消息流標(biāo)識(shí)為鍵在消息流標(biāo)識(shí)Hash表中查找外部消息流映射值;

      S403,將取到的Kafka消息的值,即下發(fā)消息的內(nèi)容,發(fā)送給步驟S402中確定的外部消息流,進(jìn)入步驟S401。

      圖5所示,是實(shí)施例中步驟(b1)的訂閱者初始化流程的示意圖,具體包括如下的步驟:

      S501,初始化一張維護(hù)從發(fā)布者標(biāo)識(shí)到發(fā)布者主題映射關(guān)系的發(fā)布者主題Hash表;

      S502,從配置文件中讀取訂閱者主題;

      S503,從配置文件中讀取發(fā)布者標(biāo)識(shí)到發(fā)布者主題映射關(guān)系并插入到發(fā)布者主題Hash表中;

      S504,初始化一張維護(hù)從消息流標(biāo)識(shí)到發(fā)布者標(biāo)識(shí)映射關(guān)系的消息流發(fā)布者Hash表;

      S505,從Kafka集群訂閱需要訂閱的主題以獲取上傳的Kafka消息;

      S506,啟動(dòng)用于執(zhí)行消息上傳流程的線程;

      S507,啟動(dòng)用于執(zhí)行消息下發(fā)流程的線程。

      圖6所示,是實(shí)施例中步驟(b2)的訂閱者消息上傳流程的示意圖,具體包括如下的步驟:

      S601,從Kafka集群獲取需要上傳的Kafka消息;

      S602,以“:”字符為分割標(biāo)志以字符串拆分的方式拆解Kafka消息的鍵以獲得消息流標(biāo)識(shí)和發(fā)布者標(biāo)識(shí);

      S603,以消息流標(biāo)識(shí)為鍵在消息流發(fā)布者Hash表中查找發(fā)布者標(biāo)識(shí)映射值,如果沒有查找到發(fā)布者標(biāo)識(shí)映射值,則進(jìn)入步驟S604;如果查找到了發(fā)布者標(biāo)識(shí)映射值,則進(jìn)入步驟S605;

      S604,將消息流標(biāo)識(shí)和發(fā)布者標(biāo)識(shí)的映射關(guān)系插入到消息流發(fā)布者Hash表中,并進(jìn)入步驟S608;

      S605,將步驟S602中分析得到的發(fā)布者標(biāo)識(shí)和步驟S603中查找到的發(fā)布者標(biāo)識(shí)相比較,若兩者不同,進(jìn)入步驟S606;否則進(jìn)入步驟S607;

      S606,將步驟S602分析得到的消息流標(biāo)識(shí)和發(fā)布者標(biāo)識(shí)的映射關(guān)系更新到消息流發(fā)布者Hash表中,并進(jìn)入步驟S608;

      S607,將步驟S601中獲取的Kafka消息的值,即需要上傳的消息,和步驟S602中獲得的消息流標(biāo)識(shí)發(fā)送給外部消息處理程序,并進(jìn)入步驟S601;

      S608,將新的消息流標(biāo)識(shí)和發(fā)布者標(biāo)識(shí)的映射關(guān)系更新到數(shù)據(jù)庫中,并進(jìn)入步驟S607。

      圖7所示,是實(shí)施例中步驟(b2)的訂閱者消息下發(fā)流程的示意圖,具體包括如下的步驟:

      S701,從消息處理程序接收需要下發(fā)的消息和消息流標(biāo)識(shí);

      S702,以消息流標(biāo)識(shí)為鍵在消息流發(fā)布者Hash表中查找發(fā)布者標(biāo)識(shí)映射值,若沒有查找到發(fā)布者標(biāo)識(shí)映射值就進(jìn)入步驟S704,否則進(jìn)入步驟S703;

      S703,以步驟S702中查找到的發(fā)布者標(biāo)識(shí)為鍵在發(fā)布者主題Hash表中查找發(fā)布者主題映射值,若沒有查找到發(fā)布者主題映射值就進(jìn)入步驟S704;如果查找到了發(fā)布者主題映射值就進(jìn)入步驟S705;

      S704,通知用戶消息下發(fā)失敗,并進(jìn)入步驟S701;

      S705,以步驟S701接收到的消息流標(biāo)識(shí)為鍵,以下發(fā)消息內(nèi)容為值構(gòu)建下發(fā)的Kafka消息,并將Kafka消息發(fā)布到步驟S703中查找到的發(fā)布者主題中,進(jìn)入步驟S701。

      本領(lǐng)域的技術(shù)人員容易理解,以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。

      當(dāng)前第1頁1 2 3 
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1