国产精品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>

      基于持久化消息隊(duì)列傳輸消息的方法及消息傳輸裝置的制作方法

      文檔序號(hào):6376917閱讀:166來(lái)源:國(guó)知局
      專(zhuān)利名稱(chēng):基于持久化消息隊(duì)列傳輸消息的方法及消息傳輸裝置的制作方法
      技術(shù)領(lǐng)域
      本發(fā)明涉及信息傳輸技術(shù),尤其涉及一種基于持久化消息隊(duì)列傳輸消息的方法及消息傳輸裝置。
      背景技術(shù)
      持久化消息隊(duì)列(mcq, MemcacheQ)是SINA公司開(kāi)發(fā)的采用分布式消息隊(duì)列服務(wù)的開(kāi)源隊(duì)列產(chǎn)品,為輕量級(jí)的消息隊(duì)列。在MemcacheQ中,底層采用事務(wù)安全型表類(lèi)型(BDB, Berkeley DB)進(jìn)行消息存儲(chǔ),通過(guò)Memcache協(xié)議的add方法和get方法,分別將消息寫(xiě)入消息隊(duì)列以及從消息隊(duì)列中讀取消息,其中,Memcache協(xié)議的add方法中,消息格式為·add (key) (fig)(expire)(datalen)\r\n(data)\r\n ;返回值STORED/UNSTORED。Memcache協(xié)議的get方法中,消息格式為get key [keyl…]\r\n返回值VALUE(key)(fig) (datalen) \r\n (data) \r\n0其中,關(guān)鍵詞(key)為隊(duì)列名稱(chēng),add方法寫(xiě)入的數(shù)據(jù)和get方法獲取的數(shù)據(jù)為消息內(nèi)容,標(biāo)記(fig)參數(shù)用于表示該消息是否需要壓縮,期限(expire)參數(shù)表示該消息的有效時(shí)間,datal en為數(shù)據(jù)長(zhǎng)度。在消息隊(duì)列中,標(biāo)記(f I g )參數(shù)和期限(exp ire )參數(shù)會(huì)被丟棄。圖I為現(xiàn)有基于持久化消息隊(duì)列傳輸消息的方法流程示意圖。參見(jiàn)圖1,該流程包括步驟101,消息發(fā)送業(yè)務(wù)邏輯通過(guò)Memcache add方法,將待傳輸消息寫(xiě)入消息隊(duì)列;本步驟中,消息發(fā)送業(yè)務(wù)邏輯利用超級(jí)文本預(yù)處理(PHP, HypertextPreprocessor )語(yǔ)言開(kāi)發(fā)。通過(guò)Memcache協(xié)議的增加(add)方法,將消息寫(xiě)入消息隊(duì)列,消息隊(duì)列為持久化消息隊(duì)列MemcacheQ。步驟102,消息處理業(yè)務(wù)邏輯通過(guò)Memcache get方法,從消息隊(duì)列中讀取待傳輸消息進(jìn)行發(fā)送;本步驟中,消息處理業(yè)務(wù)邏輯利用PHP語(yǔ)言開(kāi)發(fā),根據(jù)預(yù)先獲取的消息訂閱信息,獲取各客戶(hù)端訂閱的消息,生成配置文件,通過(guò)Memcache get方法,主動(dòng)向消息隊(duì)列發(fā)起請(qǐng)求,依序讀取消息隊(duì)列中的消息,根據(jù)配置文件,獲取該消息需要發(fā)送的目的客戶(hù)端信息,進(jìn)行發(fā)送,由各客戶(hù)端的應(yīng)用程序?qū)邮盏南⑦M(jìn)行處理。消息隊(duì)列基于請(qǐng)求應(yīng)答方式,接收消息處理業(yè)務(wù)邏輯發(fā)送的請(qǐng)求,應(yīng)答消息處理業(yè)務(wù)邏輯,將消息輸出。步驟103,消息隊(duì)列確認(rèn)消息讀取完畢,刪除消息隊(duì)列中的該消息。本步驟中,消息隊(duì)列基于請(qǐng)求應(yīng)答方式,在消息被讀出后,自動(dòng)觸發(fā)將該消息從消息隊(duì)列中刪除。由上述可見(jiàn),現(xiàn)有基于持久化消息隊(duì)列傳輸消息的方法,由于消息隊(duì)列基于請(qǐng)求應(yīng)答方式,因而,消息一旦被消息處理業(yè)務(wù)邏輯讀取出來(lái),即直接從消息隊(duì)列中刪除該讀取的消息。這樣,如果消息處理業(yè)務(wù)邏輯與客戶(hù)端之間的傳輸通路異常,或客戶(hù)端的應(yīng)用程序發(fā)生異常,例如,應(yīng)用程序已經(jīng)接收到消息,但尚未成功處理該消息,使得應(yīng)用程序尚未成功處理該消息,而消息隊(duì)列無(wú)法得知應(yīng)用程序是否成功處理了所獲取的消息,將會(huì)造成該消息丟失,后續(xù)無(wú)法繼續(xù)從消息隊(duì)列中獲取該消息進(jìn)行處理,造成消息無(wú)法正常處理,使得消息處理效率降低。

      發(fā)明內(nèi)容
      本發(fā)明的實(shí)施例提供一種基于持久化消息隊(duì)列傳輸消息的方法,提高消息處理效率。
      本發(fā)明的實(shí)施例還提供一種基于持久化消息隊(duì)列的消息傳輸裝置,提高消息處理效率。為達(dá)到上述目的,本發(fā)明實(shí)施例提供的一種基于持久化消息隊(duì)列傳輸消息的方法,包括接收待傳輸消息,為待傳輸消息設(shè)置游標(biāo)信息,并將設(shè)置游標(biāo)信息的消息寫(xiě)入消息隊(duì)列;根據(jù)當(dāng)前更新存儲(chǔ)的游標(biāo)確認(rèn)信息,獲取當(dāng)前待傳輸消息,從消息隊(duì)列中讀取當(dāng)前待傳輸消息,進(jìn)行發(fā)送;接收根據(jù)發(fā)送的當(dāng)前待傳輸消息返回的游標(biāo)確認(rèn)信息,更新當(dāng)前存儲(chǔ)的游標(biāo)確認(rèn)信息。其中,所述為待傳輸消息設(shè)置游標(biāo)信息包括判斷當(dāng)前接收的待傳輸消息是否為接收的第一條消息,如果是,為接收的待傳輸消息分配游標(biāo)序列號(hào),并記錄分配的游標(biāo)序列號(hào)信息;如果不是,將記錄的游標(biāo)序列號(hào)進(jìn)行累加,為待傳輸消息設(shè)置累加的游標(biāo)序列號(hào),記錄累加的游標(biāo)序列號(hào)信息。其中,所述為待傳輸消息設(shè)置游標(biāo)信息包括判斷消息隊(duì)列中是否存在寫(xiě)入的消息,如果不存在,為接收的待傳輸消息分配游標(biāo)序列號(hào);如果存在,獲取消息隊(duì)列中當(dāng)前已寫(xiě)入消息的游標(biāo)序列號(hào)信息,對(duì)獲取的游標(biāo)序列號(hào)進(jìn)行累加,為待傳輸消息設(shè)置累加的游標(biāo)序列號(hào)。其中,利用超級(jí)文本預(yù)處理語(yǔ)言開(kāi)發(fā)的消息發(fā)送業(yè)務(wù)邏輯接收所述待傳輸消息。其中,所述將設(shè)置游標(biāo)信息的消息寫(xiě)入消息隊(duì)列包括消息發(fā)送業(yè)務(wù)邏輯通過(guò)Memcache add方法,將設(shè)置游標(biāo)序列號(hào)的消息寫(xiě)入消息隊(duì)列。其中,所述在為待傳輸消息設(shè)置游標(biāo)信息后,將設(shè)置游標(biāo)信息的消息寫(xiě)入消息隊(duì)列之前,進(jìn)一步包括對(duì)接收的待傳輸消息進(jìn)行分類(lèi),為待傳輸消息設(shè)置消息類(lèi)型信息。其中,所述根據(jù)當(dāng)前更新存儲(chǔ)的游標(biāo)確認(rèn)信息,獲取當(dāng)前待傳輸消息包括如果當(dāng)前更新存儲(chǔ)的游標(biāo)確認(rèn)信息為空,通過(guò)Memcache get方法,從消息隊(duì)列中讀取最前端的待傳輸消息;如果當(dāng)前已更新存儲(chǔ)的游標(biāo)確認(rèn)信息不為空,將已更新存儲(chǔ)的游標(biāo)確認(rèn)信息對(duì)應(yīng)的游標(biāo)序列號(hào)進(jìn)行累加,通過(guò)Memcache get方法,從消息隊(duì)列中讀取累加的游標(biāo)序列號(hào)對(duì)應(yīng)的待傳輸消息。其中,所述從消息隊(duì)列中讀取當(dāng)前待傳輸消息,進(jìn)行發(fā)送包括預(yù)先設(shè)置并存儲(chǔ)待傳輸消息需要發(fā)送的目的客戶(hù)端信息,生成消息的配置文件;從消息隊(duì)列中讀取當(dāng)前待傳輸消息,獲取該當(dāng)前待傳輸消息的配置文件;根據(jù)配置文件中包含的目的客戶(hù)端信息進(jìn)行發(fā)送。其中,所述方法進(jìn)一步包括對(duì)存儲(chǔ)的游標(biāo)確認(rèn)信息進(jìn)行分類(lèi),以客戶(hù)端為標(biāo)識(shí)存儲(chǔ)接收的游標(biāo)確認(rèn)信息。其中,所述在從消息隊(duì)列中讀取當(dāng)前待傳輸消息之后,獲取該當(dāng)前待傳輸消息的配置文件之前,進(jìn)一步包括如果當(dāng)前待傳輸消息位于消息隊(duì)列中最前端,執(zhí)行獲取該當(dāng)前待傳輸消息的配置文件的步驟;如果當(dāng)前待傳輸消息不位于消息隊(duì)列中最前端,根據(jù)當(dāng)前更新存儲(chǔ)的游標(biāo)確認(rèn)信息所屬的客戶(hù)端,將當(dāng)前待傳輸消息發(fā)送至所述游標(biāo)確認(rèn)信息所屬的客戶(hù)端。其中,所述方法進(jìn)一步包括在發(fā)送消息后,進(jìn)行計(jì)時(shí);如果在預(yù)先設(shè)置的計(jì)時(shí)時(shí)間內(nèi)沒(méi)有接收到客戶(hù)端返回的游標(biāo)確認(rèn)信息,將當(dāng)前存儲(chǔ)的游標(biāo)確認(rèn)信息對(duì)應(yīng)的待傳輸消息進(jìn)行重傳。其中,所述在發(fā)送消息后,接收根據(jù)發(fā)送的當(dāng)前待傳輸消息返回的游標(biāo)確認(rèn)信息之前,進(jìn)一步包括進(jìn)行消息處理的客戶(hù)端存儲(chǔ)處理成功的消息對(duì)應(yīng)的游標(biāo)確認(rèn)信息;接收消息,獲取接收消息中的游標(biāo)序列號(hào),判斷消息中的游標(biāo)序列號(hào)與存儲(chǔ)的游標(biāo)確認(rèn)信息中包含的游標(biāo)序列號(hào);如果消息中的游標(biāo)序列號(hào)與存儲(chǔ)的游標(biāo)序列號(hào)相同,或者,消息中的游標(biāo)序列號(hào)與存儲(chǔ)的游標(biāo)序列號(hào)相差兩個(gè)以上累加單位,丟棄該消息,向消息處理業(yè)務(wù)邏輯返回存儲(chǔ)的游標(biāo)確認(rèn)信息;如果消息中的游標(biāo)序列號(hào)大于存儲(chǔ)的游標(biāo)序列號(hào)一個(gè)累加單位,處理該消息,在處理成功后,更新存儲(chǔ)的游標(biāo)確認(rèn)信息,向消息處理業(yè)務(wù)邏輯返回更新存儲(chǔ)的游標(biāo)確認(rèn)信
      肩、O其中,所述方法進(jìn)一步包括確認(rèn)已接收到消息配置文件中各客戶(hù)端返回的游標(biāo)確認(rèn)信息,刪除消息隊(duì)列中的該消息。一種基于持久化消息隊(duì)列的消息傳輸裝置,該裝置包括消息發(fā)送業(yè)務(wù)邏輯模塊以及消息處理業(yè)務(wù)邏輯模塊,其中,消息發(fā)送業(yè)務(wù)邏輯模塊,用于接收待傳輸消息,為待傳輸消息設(shè)置游標(biāo)信息,并將設(shè)置游標(biāo)信息的消息寫(xiě)入消息隊(duì)列;消息處理業(yè)務(wù)邏輯模塊,用于根據(jù)當(dāng)前更新存儲(chǔ)的游標(biāo)確認(rèn)信息,獲取當(dāng)前待傳輸消息,從消息隊(duì)列中讀取當(dāng)前待傳輸消息,進(jìn)行發(fā)送;接收根據(jù)發(fā)送的當(dāng)前待傳輸消息返回的游標(biāo)確認(rèn)信息,更新當(dāng)前存儲(chǔ)的游標(biāo)確認(rèn)信息。所述消息處理業(yè)務(wù)邏輯模塊進(jìn)一步用于確認(rèn)已接收到消息配置文件中各客戶(hù)端返回的游標(biāo)確認(rèn)信息,刪除消息隊(duì)列中的該消息。所述消息處理業(yè)務(wù)邏輯模塊包括存儲(chǔ)單元、更新單元、傳輸消息獲取單元以及發(fā)送單元,其中,存儲(chǔ)單元,用于存儲(chǔ)游標(biāo)確認(rèn)信息;更新單元,用于接收根據(jù)發(fā)送的當(dāng)前待傳輸消息返回的游標(biāo)確認(rèn)信息,更新存儲(chǔ) 單元中存儲(chǔ)的游標(biāo)確認(rèn)信息,向傳輸消息獲取單元輸出觸發(fā)信息;傳輸消息獲取單元,用于接收觸發(fā)信息,根據(jù)當(dāng)前更新存儲(chǔ)的游標(biāo)確認(rèn)信息,獲取當(dāng)前待傳輸消息,從消息隊(duì)列中讀取當(dāng)前待傳輸消息,輸出至發(fā)送單元;發(fā)送單元,用于獲取接收的當(dāng)前待傳輸消息的配置文件,根據(jù)配置文件中包含的目的客戶(hù)端信息進(jìn)行發(fā)送。所述消息處理業(yè)務(wù)邏輯模塊進(jìn)一步包括計(jì)時(shí)單元,用于在發(fā)送單元發(fā)送消息后,進(jìn)行計(jì)時(shí);如果在預(yù)先設(shè)置的計(jì)時(shí)時(shí)間內(nèi),監(jiān)測(cè)到更新單元沒(méi)有接收到客戶(hù)端返回的游標(biāo)確認(rèn)信息,觸發(fā)傳輸消息獲取單元將當(dāng)前存儲(chǔ)的游標(biāo)確認(rèn)信息對(duì)應(yīng)的待傳輸消息進(jìn)行重傳。所述消息處理業(yè)務(wù)邏輯模塊進(jìn)一步包括判斷單元,用于判斷傳輸消息獲取單元獲取的當(dāng)前待傳輸消息是否位于消息隊(duì)列中最前端,如果是,觸發(fā)發(fā)送單元根據(jù)配置文件中包含的目的客戶(hù)端信息進(jìn)行發(fā)送;否則,觸發(fā)發(fā)送單元根據(jù)當(dāng)前更新存儲(chǔ)的游標(biāo)確認(rèn)信息所屬的客戶(hù)端,將當(dāng)前待傳輸消息發(fā)送至所述游標(biāo)確認(rèn)信息所屬的客戶(hù)端。由上述技術(shù)方案可見(jiàn),本發(fā)明實(shí)施例提供的一種基于持久化消息隊(duì)列傳輸消息的方法及消息傳輸裝置,接收待傳輸消息,為待傳輸消息設(shè)置游標(biāo)信息,并將設(shè)置游標(biāo)信息的消息寫(xiě)入消息隊(duì)列;根據(jù)當(dāng)前更新存儲(chǔ)的游標(biāo)確認(rèn)信息,獲取當(dāng)前待傳輸消息,從消息隊(duì)列中讀取當(dāng)前待傳輸消息,進(jìn)行發(fā)送;接收根據(jù)發(fā)送的當(dāng)前待傳輸消息返回的游標(biāo)確認(rèn)信息,
      更新當(dāng)前存儲(chǔ)的游標(biāo)確認(rèn)信息。這樣,通過(guò)引入消息游標(biāo)信息,在消息被讀出之后,不觸發(fā)刪除消息隊(duì)列中該消息的流程,并設(shè)置發(fā)送的消息在被成功處理后,返回相應(yīng)的游標(biāo)確認(rèn)信息,根據(jù)返回的游標(biāo)確認(rèn)信息,確定下一待傳輸消息,避免了通信路徑異常,或客戶(hù)端的應(yīng)用程序在尚未成功處理該消息時(shí)發(fā)生異常,后續(xù)將會(huì)造成該消息無(wú)法進(jìn)行正常處理的問(wèn)題,提高了消息處理效率。


      為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,以下將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹。顯而易見(jiàn)地,以下描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員而言,還可以根據(jù)這些附圖所示實(shí)施例得到其它的實(shí)施例及其附圖。圖I為現(xiàn)有基于持久化消息隊(duì)列傳輸消息的方法流程示意圖。
      圖2為本發(fā)明實(shí)施例基于持久化消息隊(duì)列傳輸消息的方法流程示意圖。圖3為本發(fā)明實(shí)施例基于持久化消息隊(duì)列傳輸消息的方法具體流程示意圖。圖4為本發(fā)明實(shí)施例消息發(fā)送端的業(yè)務(wù)邏輯流程示意圖。圖5為本發(fā)明實(shí)施例消息處理端的業(yè)務(wù)邏輯流程示意圖。圖6為本發(fā)明實(shí)施例基于持久化消息隊(duì)列的消息傳輸裝置結(jié)構(gòu)示意圖。
      具體實(shí)施例方式以下將結(jié)合附圖對(duì)本發(fā)明各實(shí)施例的技術(shù)方案進(jìn)行清楚、完整的描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明的一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)的前提下所得到的所有其它實(shí)施例,都屬于本發(fā)明所保護(hù)的范圍?!がF(xiàn)有基于持久化消息隊(duì)列傳輸消息的方法,由于消息隊(duì)列基于請(qǐng)求應(yīng)答方式,在消息被消息處理業(yè)務(wù)邏輯讀取后,即將該讀取的消息直接從消息隊(duì)列中刪除,因而,如果通信路徑異常,或客戶(hù)端的應(yīng)用程序在尚未成功處理該消息時(shí)發(fā)生異常,后續(xù)將會(huì)造成該消息無(wú)法進(jìn)行正常處理,使得消息處理效率降低。進(jìn)一步地,目前的消息處理業(yè)務(wù)邏輯,采用的是一個(gè)死循環(huán)的PHP程序,采用Memcache協(xié)議的get方法,在循環(huán)中不斷嘗試從mcq的消息隊(duì)列中獲取消息,獲取到消息后進(jìn)行消息發(fā)送,但PHP程序長(zhǎng)期循環(huán)執(zhí)行,將可能導(dǎo)致崩潰,或者,當(dāng)業(yè)務(wù)發(fā)生變更,臨時(shí)重新啟動(dòng)消息處理程序時(shí),就會(huì)造成消息丟失。這樣,在使用消息隊(duì)列的業(yè)務(wù)對(duì)數(shù)據(jù)安全性要求較高的情況下,業(yè)務(wù)異常不僅會(huì)導(dǎo)致執(zhí)行業(yè)務(wù)的效率降低,也降低了用戶(hù)的業(yè)務(wù)體驗(yàn),消息傳輸?shù)目煽啃越档汀1景l(fā)明實(shí)施例中,考慮對(duì)消息隊(duì)列中的消息設(shè)置游標(biāo),在消息被讀取后,如果未接收到處理該消息的應(yīng)用程序返回的游標(biāo)確認(rèn)信息,則不刪除該消息,而處理消息的應(yīng)用程序自身也存儲(chǔ)處理成功的消息的游標(biāo)信息,依據(jù)存儲(chǔ)的游標(biāo)信息與接收消息中包含的游標(biāo)信息,進(jìn)行游標(biāo)交換并處理接收的消息,從而,基于游標(biāo)交換,提出了一種消息可靠傳遞的方法。具體來(lái)說(shuō),消息發(fā)送業(yè)務(wù)邏輯仍舊采用mcq的add方法向消息隊(duì)列中寫(xiě)入消息,但引入消息游標(biāo)(id),對(duì)寫(xiě)入的消息進(jìn)行標(biāo)記,即消息發(fā)送業(yè)務(wù)邏輯接收來(lái)自網(wǎng)絡(luò)服務(wù)器下發(fā)的消息,預(yù)先為該消息分配一個(gè)自增id,例如,可以按照消息發(fā)送業(yè)務(wù)邏輯接收到的消息的順序進(jìn)行分配,id從I開(kāi)始,最大為64位無(wú)符號(hào)長(zhǎng)整型。將攜帶游標(biāo)信息的消息寫(xiě)入消息隊(duì)列。這樣,通過(guò)消息id,可以標(biāo)記該消息在當(dāng)前消息隊(duì)列內(nèi)的一個(gè)絕對(duì)位置;對(duì)于消息隊(duì)列,設(shè)置在消息被讀出之后,不觸發(fā)刪除消息隊(duì)列中該消息的流程,并根據(jù)接收到的處理該消息的應(yīng)用程序返回的游標(biāo)確認(rèn)信息,主動(dòng)推送消息隊(duì)列中的下一條消息。較佳地,本發(fā)明實(shí)施例應(yīng)用于異步提交系統(tǒng)中。圖2為本發(fā)明實(shí)施例基于持久化消息隊(duì)列傳輸消息的方法流程示意圖。參見(jiàn)圖2,該流程包括步驟201,接收待傳輸消息,為待傳輸消息設(shè)置游標(biāo)信息,并將設(shè)置游標(biāo)信息的消息寫(xiě)入消息隊(duì)列;本步驟中,較佳地,由消息發(fā)送業(yè)務(wù)邏輯接收待傳輸消息,其中,消息發(fā)送業(yè)務(wù)邏輯利用超級(jí)文本預(yù)處理語(yǔ)言開(kāi)發(fā),消息隊(duì)列為持久化消息隊(duì)列MemcacheQ,待傳輸消息可以是各運(yùn)營(yíng)商根據(jù)運(yùn)營(yíng)策略的需要,通過(guò)運(yùn)營(yíng)商服務(wù)器下發(fā)。本發(fā)明實(shí)施例中,游標(biāo)信息為游標(biāo)序列號(hào)。當(dāng)然,實(shí)際應(yīng)用中,游標(biāo)信息也可以是其它的信息,只要保證為每個(gè)消息設(shè)置的游標(biāo)信息互不相同即可,即只要能夠唯一標(biāo)識(shí)消息即可。為待傳輸消息設(shè)置游標(biāo)信息包括判斷當(dāng)前接收的待傳輸消息是否為接收的第一條消息,如果是,為接收的待傳輸消息分配游標(biāo)序列號(hào),并記錄分配的游標(biāo)序列號(hào)信息;如果不是,將記錄的游標(biāo)序列號(hào)進(jìn)行累加,為待傳輸消息設(shè)置累加的游標(biāo)序列號(hào),記錄累加的游標(biāo)序列號(hào)信息。本步驟中,消息發(fā)送業(yè)務(wù)邏輯判斷接收的待傳輸消息是否為第一條消息,如果是,將初始游標(biāo)序列號(hào)分配給該消息,并記錄該分配的游標(biāo)序列號(hào)信息,后續(xù)如果接收到新消 息,則將接收的前一消息的游標(biāo)序列號(hào)進(jìn)行累加,作為當(dāng)前新接收消息的游標(biāo)序列號(hào)。例如,將游標(biāo)序列號(hào)依序加1,如果設(shè)置的第一條消息對(duì)應(yīng)的初始游標(biāo)序列號(hào)為1,則后續(xù)接收的消息對(duì)應(yīng)的游標(biāo)序列號(hào),依序?yàn)?、3、4、…。較佳地,本發(fā)明實(shí)施例中,游標(biāo)序列號(hào)采用64位無(wú)符號(hào)長(zhǎng)整型字符進(jìn)行記錄。當(dāng)然,實(shí)際應(yīng)用中,為待傳輸消息設(shè)置游標(biāo)信息也可以包括判斷消息隊(duì)列中是否存在寫(xiě)入的消息,如果不存在,為接收的待傳輸消息分配游標(biāo)序列號(hào);如果存在,獲取消息隊(duì)列中當(dāng)前已寫(xiě)入消息的游標(biāo)序列號(hào)信息,對(duì)獲取的游標(biāo)序列號(hào)進(jìn)行累加,為待傳輸消息設(shè)置累加的游標(biāo)序列號(hào)。本步驟中,利用消息隊(duì)列中消息是依序?qū)懭?、并按照先入先出的特點(diǎn),最先寫(xiě)入的消息位于消息隊(duì)列較前的位置,因而,消息發(fā)送業(yè)務(wù)邏輯在接收到待傳輸消息時(shí),查詢(xún)消息隊(duì)列中是否有寫(xiě)入的消息,如果沒(méi)有,表明當(dāng)前接收到的待傳輸消息為第一條消息;如果消息隊(duì)列中有寫(xiě)入的消息,則可以根據(jù)最近一次寫(xiě)入的消息中攜帶的游標(biāo)序列號(hào)信息,為當(dāng)前接收到的待傳輸消息設(shè)置相應(yīng)的游標(biāo)序列號(hào)。將設(shè)置游標(biāo)信息的消息寫(xiě)入消息隊(duì)列包括消息發(fā)送業(yè)務(wù)邏輯通過(guò)Memcache add方法,將設(shè)置游標(biāo)序列號(hào)的消息寫(xiě)入消息隊(duì)列。本步驟中,利用PHP語(yǔ)言開(kāi)發(fā)的消息發(fā)送業(yè)務(wù)邏輯,通過(guò)Memcache協(xié)議的增加(add)方法,將設(shè)置了游標(biāo)序列號(hào)的消息寫(xiě)入消息隊(duì)列MemcacheQ。這樣,后續(xù)中,根據(jù)游標(biāo)序列號(hào),可以容易確定游標(biāo)序列號(hào)對(duì)應(yīng)的消息在消息隊(duì)列中的位置。本發(fā)明實(shí)施例中,還可以對(duì)消息隊(duì)列進(jìn)行標(biāo)識(shí),例如,采用消息隊(duì)列名稱(chēng)來(lái)唯一標(biāo)識(shí)消息隊(duì)列。進(jìn)一步地,在為待傳輸消息設(shè)置游標(biāo)信息后,將設(shè)置游標(biāo)信息的消息寫(xiě)入消息隊(duì)列之前,進(jìn)一步包括對(duì)接收的待傳輸消息進(jìn)行分類(lèi),為待傳輸消息設(shè)置消息類(lèi)型信息。本步驟中,還可以根據(jù)預(yù)先設(shè)置的消息分類(lèi)策略,對(duì)接收的消息進(jìn)行分類(lèi),并將分類(lèi)的消息類(lèi)型信息攜帶在消息中。步驟202,根據(jù)當(dāng)前更新存儲(chǔ)的游標(biāo)確認(rèn)信息,獲取當(dāng)前待傳輸消息,從消息隊(duì)列中讀取當(dāng)前待傳輸消息,進(jìn)行發(fā)送;
      本步驟中,由消息處理業(yè)務(wù)邏輯對(duì)消息隊(duì)列中的消息進(jìn)行讀取操作。根據(jù)當(dāng)前更新存儲(chǔ)的游標(biāo)確認(rèn)信息,獲取當(dāng)前待傳輸消息包括如果當(dāng)前更新存儲(chǔ)的游標(biāo)確認(rèn)信息為空,通過(guò)Memcache get方法,從消息隊(duì)列中讀取最前端的待傳輸消息;本步驟中,預(yù)先設(shè)置客戶(hù)端的應(yīng)用程序在接收到消息,并進(jìn)行成功處理后,需要返回游標(biāo)確認(rèn)信息,以更新消息處理業(yè)務(wù)邏輯中存儲(chǔ)的游標(biāo)確認(rèn)消息,并在確認(rèn)更新后,觸發(fā)執(zhí)行獲取當(dāng)前待傳輸消息的步驟。如果當(dāng)前更新存儲(chǔ)的游標(biāo)確認(rèn)信息為空,表明還未從消息隊(duì)列中讀取消息進(jìn)行發(fā)送。如果當(dāng)前已更新存儲(chǔ)的游標(biāo)確認(rèn)信息不為空,將已更新存儲(chǔ)的游標(biāo)確認(rèn)信息對(duì)應(yīng)的游標(biāo)序列號(hào)進(jìn)行累加,通過(guò)Memcache get方法,從消息隊(duì)列中讀取累加的游標(biāo)序列號(hào)對(duì)應(yīng)的待傳輸消息。
      ·
      本步驟中,設(shè)置消息處理業(yè)務(wù)邏輯從消息隊(duì)列中讀取消息,經(jīng)過(guò)發(fā)送,由客戶(hù)端的應(yīng)用程序接收并進(jìn)行成功處理后,向消息處理業(yè)務(wù)邏輯返回游標(biāo)確認(rèn)信息,游標(biāo)確認(rèn)信息是對(duì)消息中攜帶的游標(biāo)序列號(hào)的確認(rèn),消息處理業(yè)務(wù)邏輯接收游標(biāo)確認(rèn)信息后,進(jìn)行存儲(chǔ),表明客戶(hù)端的應(yīng)用程序已成功處理了該消息,可以進(jìn)行下一消息的處理。從消息隊(duì)列中讀取當(dāng)前待傳輸消息,進(jìn)行發(fā)送包括預(yù)先設(shè)置并存儲(chǔ)待傳輸消息需要發(fā)送的目的客戶(hù)端信息,生成消息的配置文件;從消息隊(duì)列中讀取當(dāng)前待傳輸消息,獲取該當(dāng)前待傳輸消息的配置文件;根據(jù)配置文件中包含的目的客戶(hù)端信息進(jìn)行發(fā)送。本步驟中,消息處理業(yè)務(wù)邏輯利用PHP語(yǔ)言開(kāi)發(fā),根據(jù)預(yù)先獲取的消息訂閱信息,例如,運(yùn)營(yíng)商服務(wù)器下發(fā)的信息,獲取訂閱消息的各客戶(hù)端信息,作為目的客戶(hù)端,生成配置文件,在從消息隊(duì)列中讀取當(dāng)前待傳輸消息后,根據(jù)該消息的配置文件,獲取該消息需要發(fā)送的目的客戶(hù)端信息,進(jìn)行發(fā)送,最后由各客戶(hù)端的應(yīng)用程序?qū)邮盏南⑦M(jìn)行處理。較佳地,實(shí)際應(yīng)用中,由于隊(duì)列中的消息,根據(jù)配置文件中包含的信息,可能向一個(gè)客戶(hù)端發(fā)送,也可能向多個(gè)客戶(hù)端發(fā)送,每個(gè)客戶(hù)端在接收到消息后,由于其處理的速度并不相同,因而,返回的游標(biāo)確認(rèn)信息也并不同步,為了滿足各客戶(hù)端的這種差異化處理需求,在每一客戶(hù)端返回游標(biāo)確認(rèn)信息后,能確保及時(shí)接收到下一條消息進(jìn)行處理,該方法還可以進(jìn)一步包括對(duì)存儲(chǔ)的游標(biāo)確認(rèn)信息進(jìn)行分類(lèi),以客戶(hù)端為標(biāo)識(shí)存儲(chǔ)接收的游標(biāo)確認(rèn)信息。這樣,在從消息隊(duì)列中讀取當(dāng)前待傳輸消息之后,獲取該當(dāng)前待傳輸消息的配置文件之前,進(jìn)一步包括如果當(dāng)前待傳輸消息位于隊(duì)列中最前端,執(zhí)行獲取該當(dāng)前待傳輸消息的配置文件的步驟;如果當(dāng)前待傳輸消息不位于隊(duì)列中最前端,根據(jù)當(dāng)前更新存儲(chǔ)的游標(biāo)確認(rèn)信息所屬的客戶(hù)端,將當(dāng)前待傳輸消息發(fā)送至所述游標(biāo)確認(rèn)信息所屬的客戶(hù)端。本步驟中,在接收到某一客戶(hù)端返回的游標(biāo)確認(rèn)信息后,根據(jù)游標(biāo)確認(rèn)信息中攜帶的客戶(hù)端信息,更新存儲(chǔ)的以客戶(hù)端為標(biāo)識(shí)的游標(biāo)確認(rèn)信息,并向該客戶(hù)端發(fā)送下一消
      肩、O實(shí)際應(yīng)用中,如果消息處理業(yè)務(wù)邏輯在預(yù)先設(shè)置的計(jì)時(shí)時(shí)間內(nèi)沒(méi)有接收到客戶(hù)端返回的游標(biāo)確認(rèn)信息,則無(wú)法對(duì)當(dāng)前存儲(chǔ)的游標(biāo)確認(rèn)信息進(jìn)行更新,可以認(rèn)為是已發(fā)送的消息出現(xiàn)了異常,需要重新發(fā)送消息。因而,該方法進(jìn)一步包括在發(fā)送消息后,進(jìn)行計(jì)時(shí);如果在預(yù)先設(shè)置的計(jì)時(shí)時(shí)間內(nèi)沒(méi)有接收到客戶(hù)端返回的游標(biāo)確認(rèn)信息,將當(dāng)前存儲(chǔ)的游標(biāo)確認(rèn)信息對(duì)應(yīng)的待傳輸消息進(jìn)行重傳。本步驟中,消息處理業(yè)務(wù)邏輯在發(fā)送消息后,由于與客戶(hù)端之間的通信異常,或者,客戶(hù)端的應(yīng)用程序接收到消息后,在處理消息的過(guò)程中由于異常,或者,客戶(hù)端的應(yīng)用程序接收到消息后,在成功處理消息后,返回游標(biāo)確認(rèn)信息,由于與消息處理業(yè)務(wù)邏輯之間的通信異常,都將使消息處理業(yè)務(wù)邏輯接收不到游標(biāo)確認(rèn)信息。步驟203,接收根據(jù)發(fā)送的當(dāng)前待傳輸消息返回的游標(biāo)確認(rèn)信息,更新當(dāng)前存儲(chǔ)的 游標(biāo)確認(rèn)信息。本步驟中,客戶(hù)端的應(yīng)用程序在接收到消息并對(duì)消息進(jìn)行成功處理后,向消息處理業(yè)務(wù)邏輯返回?cái)y帶客戶(hù)端信息的游標(biāo)確認(rèn)信息,在接收到游標(biāo)確認(rèn)信息后,根據(jù)游標(biāo)確認(rèn)信息中攜帶的客戶(hù)端信息,更新以客戶(hù)端為標(biāo)識(shí)存儲(chǔ)的游標(biāo)確認(rèn)信息。在更新后,自動(dòng)觸發(fā)執(zhí)行步驟202,以向該客戶(hù)端發(fā)送下一消息。這樣,可以實(shí)現(xiàn)主動(dòng)從消息隊(duì)列中讀取消息,從而實(shí)現(xiàn)向客戶(hù)端主動(dòng)推送消息的目的。較佳地,為了有效防止消息處理業(yè)務(wù)邏輯在發(fā)送消息時(shí),對(duì)消息中的游標(biāo)信息進(jìn)行更改,導(dǎo)致消息處理業(yè)務(wù)邏輯在根據(jù)客戶(hù)端返回的游標(biāo)確認(rèn)信息進(jìn)行下一條消息的發(fā)送時(shí),可能漏過(guò)或重復(fù)發(fā)送消息,例如,如果將消息中的游標(biāo)序列號(hào)減小,則導(dǎo)致重復(fù)發(fā)送;如果將消息中的游標(biāo)序列號(hào)增大,則導(dǎo)致漏過(guò)消息隊(duì)列中的一些消息。因而,本發(fā)明實(shí)施例中,在發(fā)送消息后,接收根據(jù)發(fā)送的當(dāng)前待傳輸消息返回的游標(biāo)確認(rèn)信息之前,進(jìn)一步包括進(jìn)行消息處理的客戶(hù)端存儲(chǔ)處理成功的消息對(duì)應(yīng)的游標(biāo)確認(rèn)信息;接收消息,獲取接收消息中的游標(biāo)序列號(hào),判斷消息中的游標(biāo)序列號(hào)與存儲(chǔ)的游標(biāo)確認(rèn)信息中包含的游標(biāo)序列號(hào);如果消息中的游標(biāo)序列號(hào)與存儲(chǔ)的游標(biāo)序列號(hào)相同,或者,消息中的游標(biāo)序列號(hào)與存儲(chǔ)的游標(biāo)序列號(hào)相差兩個(gè)以上累加單位,丟棄該消息,向消息處理業(yè)務(wù)邏輯返回存儲(chǔ)的游標(biāo)確認(rèn)信息;本步驟中,如果消息中的游標(biāo)序列號(hào)與存儲(chǔ)的游標(biāo)序列號(hào)相同,表明該客戶(hù)端上一次向消息處理業(yè)務(wù)邏輯返回的游標(biāo)確認(rèn)信息沒(méi)有成功到達(dá)消息處理業(yè)務(wù)邏輯,消息處理業(yè)務(wù)邏輯在計(jì)時(shí)超時(shí)后重傳了該消息,而該消息已被客戶(hù)端成功處理,并記錄了處理成功的游標(biāo)確認(rèn)信息。如果消息中的游標(biāo)序列號(hào)與存儲(chǔ)的游標(biāo)序列號(hào)相差兩個(gè)以上累加單位,表明在消息處理業(yè)務(wù)邏輯處,對(duì)發(fā)送的消息進(jìn)行了更改,將導(dǎo)致消息不能按序進(jìn)行處理,因而,需要通知消息處理業(yè)務(wù)邏輯,從客戶(hù)端已成功處理的消息后,重新按序發(fā)送消息。如果消息中的游標(biāo)序列號(hào)大于存儲(chǔ)的游標(biāo)序列號(hào)一個(gè)累加單位,處理該消息,在處理成功后,更新存儲(chǔ)的游標(biāo)確認(rèn)信息,向消息處理業(yè)務(wù)邏輯返回更新存儲(chǔ)的游標(biāo)確認(rèn)信肩、O這樣,通過(guò)消息處理業(yè)務(wù)邏輯在發(fā)送的消息中攜帶游標(biāo)信息,客戶(hù)端在處理成功消息后,存儲(chǔ)該消息的游標(biāo)信息,客戶(hù)端通過(guò)將接收的消息的游標(biāo)信息與自身存儲(chǔ)的游標(biāo)信息進(jìn)行比較,實(shí)現(xiàn)與消息處理業(yè)務(wù)邏輯的游標(biāo)交換,可以保證消息嚴(yán)格按照順序進(jìn)行處理。實(shí)際應(yīng)用中,該方法還可以進(jìn)一步包括步驟204,確認(rèn)已接收到消息配置文件中各客戶(hù)端返回的游標(biāo)確認(rèn)信息,刪除消息隊(duì)列中的該消息。圖3為本發(fā)明實(shí)施例基于持久化消息隊(duì)列傳輸消息的方法具體流程示意圖。參見(jiàn)圖3,該流程包括步驟301,消息發(fā)送業(yè)務(wù)邏輯通過(guò)Memcache add方法,將待傳輸消息發(fā)送至消息接收端;
      本步驟中,消息發(fā)送業(yè)務(wù)邏輯采用PHP語(yǔ)言開(kāi)發(fā),消息讀寫(xiě)過(guò)程中,包括用于寫(xiě)入消息的消息接收端以及用于消息讀取的消息發(fā)送端。步驟302,消息接收端將消息寫(xiě)入持久化磁盤(pán)進(jìn)行存儲(chǔ);本步驟中,持久化磁盤(pán)為消息隊(duì)列。步驟303,消息發(fā)送端從持久化磁盤(pán)讀取消息;本步驟中,消息發(fā)送端根據(jù)當(dāng)前存儲(chǔ)的游標(biāo)確認(rèn)信息,讀取消息。步驟304,消息發(fā)送端將讀取的消息推送至消息處理業(yè)務(wù)邏輯;本步驟中,消息發(fā)送端根據(jù)消息配置文件或接收的游標(biāo)確認(rèn)信息確定消息發(fā)送的目的客戶(hù)端。步驟305,消息處理業(yè)務(wù)邏輯發(fā)送消息,并接收游標(biāo)確認(rèn)信息,輸出至消息發(fā)送端。本步驟中,消息發(fā)送端記錄當(dāng)前所發(fā)送的最后一條消息的游標(biāo)信息,消息處理端(客戶(hù)端的應(yīng)用程序)也會(huì)記錄處理成功的消息的游標(biāo)信息。當(dāng)消息隊(duì)列中存在需要發(fā)送的消息時(shí),消息發(fā)送端將消息從磁盤(pán)讀入內(nèi)存(mcpost協(xié)議實(shí)現(xiàn)使用Iinux內(nèi)核提供的sendf ile機(jī)制,直接將消息從內(nèi)核發(fā)送到網(wǎng)絡(luò),無(wú)需讀入內(nèi)存),并將消息通過(guò)消息處理業(yè)務(wù)邏輯發(fā)送給消息處理端,消息處理端在接收完消息后,進(jìn)行處理,直到消息正確處理完畢,才會(huì)記錄該消息的游標(biāo)信息和發(fā)送應(yīng)答(POSTED)ο本發(fā)明實(shí)施例中,當(dāng)用戶(hù)擅自修改消息發(fā)送端的游標(biāo)信息后,發(fā)送消息后,消息處理端通過(guò)檢查當(dāng)前消息中的游標(biāo)信息值和本地所記錄的游標(biāo)信息值是否匹配,如果不匹配,則返回本地所記錄的游標(biāo)信息值,消息發(fā)送端則會(huì)根據(jù)消息處理端所返回的游標(biāo)信息值,計(jì)算消息偏移來(lái)查找對(duì)應(yīng)的消息進(jìn)行發(fā)送,這個(gè)過(guò)程稱(chēng)之為游標(biāo)交換過(guò)程。在進(jìn)行消息傳遞時(shí),還可以進(jìn)一步攜帶消息的類(lèi)型信息,并進(jìn)行檢查,本發(fā)明實(shí)施例中,使用的協(xié)議可以是自定義的內(nèi)部協(xié)議,采用類(lèi)似于Memcache協(xié)議的擴(kuò)展協(xié)議;并可以支持http協(xié)議,而且可根據(jù)應(yīng)用需要進(jìn)行擴(kuò)展協(xié)議開(kāi)發(fā)。舉例來(lái)說(shuō),其格式可以為post(key)(qname)(last)(curr)(datalen)\r\n(data)\r\n返回值P0STED或者進(jìn)行游標(biāo)交換的最近(last)值,即消息中攜帶的游標(biāo)信息值。圖4為本發(fā)明實(shí)施例消息發(fā)送端的業(yè)務(wù)邏輯流程示意圖。參見(jiàn)圖4,該流程包括步驟401,讀取當(dāng)前更新的游標(biāo)確認(rèn)信息;
      步驟402,根據(jù)當(dāng)前更新的游標(biāo)確認(rèn)信息,計(jì)算當(dāng)前待傳輸消息并讀入內(nèi)存;步驟403,發(fā)送消息;步驟404,計(jì)時(shí),判斷在預(yù)先設(shè)置的計(jì)時(shí)時(shí)間內(nèi)是否接收到應(yīng)答,如果是,判斷應(yīng)答中攜帶的游標(biāo)確認(rèn)信息是返回值還是游標(biāo)交換,如果是返回值,執(zhí)行步驟405 ;如果是游標(biāo)交換,執(zhí)行步驟406 ;否則,執(zhí)行步驟407 ;本步驟中,返回值為POSTED。步驟405,將存儲(chǔ)的游標(biāo)確認(rèn)信息更新為返回值,返回執(zhí)行步驟402 ;步驟406,將存儲(chǔ)的游標(biāo)確認(rèn)信息更新為游標(biāo)交換值,返回執(zhí)行步驟402 ;

      步驟407,超時(shí)重發(fā)消息,返回執(zhí)行步驟403。圖5為本發(fā)明實(shí)施例消息處理端的業(yè)務(wù)邏輯流程示意圖。參見(jiàn)圖5,該流程包括步驟501,消息處理端接收消息;步驟502,檢查當(dāng)前消息中的游標(biāo)信息值和本地所記錄的游標(biāo)信息值是否匹配,如果不匹配,執(zhí)行步驟503,如果匹配,執(zhí)行步驟504 ;本步驟進(jìn)行游標(biāo)檢查。步驟503,進(jìn)行游標(biāo)交換,返回本地所記錄的游標(biāo)信息值;步驟504,進(jìn)行消息處理,判斷消息處理是否成功,如果是,執(zhí)行步驟505,否則,執(zhí)行步驟506 ;步驟505,返回應(yīng)答,攜帶處理成功的返回值(POSTED);步驟506,消息處理失敗,結(jié)束流程。由上述可見(jiàn),本發(fā)明實(shí)施例的基于持久化消息隊(duì)列傳輸消息的方法,通過(guò)引入消息游標(biāo)信息,在消息被讀出之后,不觸發(fā)刪除消息隊(duì)列中該消息的流程,并設(shè)置發(fā)送的消息在被成功處理后,返回相應(yīng)的游標(biāo)確認(rèn)信息,根據(jù)返回的游標(biāo)確認(rèn)信息,確定下一待傳輸消息,在未接收到游標(biāo)確認(rèn)信息時(shí),重傳消息,避免了通信路徑異常,或客戶(hù)端的應(yīng)用程序在尚未成功處理該消息時(shí)發(fā)生異常,后續(xù)將會(huì)造成該消息無(wú)法進(jìn)行正常處理的問(wèn)題,提高了消息處理效率;進(jìn)一步地,采用游標(biāo)交換機(jī)制,相較于傳統(tǒng)的消息傳輸方法,游標(biāo)交換機(jī)制可以保證消息整個(gè)傳輸流程具有更加嚴(yán)密的事務(wù)性,防止消息發(fā)送端隨意篡改消息id,并保證消息處理端的業(yè)務(wù)層數(shù)據(jù)嚴(yán)格按照順序處理,防止消息丟失,提高了消息傳輸?shù)目煽啃?,也提升了用?hù)的業(yè)務(wù)體驗(yàn)。圖6為本發(fā)明實(shí)施例基于持久化消息隊(duì)列的消息傳輸裝置結(jié)構(gòu)示意圖。參見(jiàn)圖6,該消息傳輸裝置包括消息發(fā)送業(yè)務(wù)邏輯模塊以及消息處理業(yè)務(wù)邏輯模塊,其中,消息發(fā)送業(yè)務(wù)邏輯模塊,用于接收待傳輸消息,為待傳輸消息設(shè)置游標(biāo)信息,并將設(shè)置游標(biāo)信息的消息寫(xiě)入消息隊(duì)列;本發(fā)明實(shí)施例中,為待傳輸消息設(shè)置游標(biāo)信息可以是判斷當(dāng)前接收的待傳輸消息是否為接收的第一條消息,如果是,為接收的待傳輸消息分配游標(biāo)序列號(hào),并記錄分配的游標(biāo)序列號(hào)信息;如果不是,將記錄的游標(biāo)序列號(hào)進(jìn)行累加,為待傳輸消息設(shè)置累加的游標(biāo)序列號(hào),記錄累加的游標(biāo)序列號(hào)信息。為待傳輸消息設(shè)置游標(biāo)信息還可以是判斷消息隊(duì)列中是否存在寫(xiě)入的消息,如果不存在,為接收的待傳輸消息分配游標(biāo)序列號(hào);如果存在,獲取消息隊(duì)列中當(dāng)前已寫(xiě)入消息的游標(biāo)序列號(hào)信息,對(duì)獲取的游標(biāo)序列號(hào)進(jìn)行累加,為待傳輸消息設(shè)置累加的游標(biāo)序列號(hào)。消息處理業(yè)務(wù)邏輯模塊,用于根據(jù)當(dāng)前更新存儲(chǔ)的游標(biāo)確認(rèn)信息,獲取當(dāng)前待傳輸消息,從消息隊(duì)列中讀取當(dāng)前待傳輸消息,進(jìn)行發(fā)送;接收根據(jù)發(fā)送的當(dāng)前待傳輸消息返回的游標(biāo)確認(rèn)信息,更新當(dāng)前存儲(chǔ)的游標(biāo)確認(rèn)信息。較佳地,消息處理業(yè)務(wù)邏輯模塊進(jìn)一步用于確認(rèn)已接收到消息配置文件中各客戶(hù)端返回的游標(biāo)確認(rèn)信息,刪除消息隊(duì)列中的該消息。其中,消息處理業(yè)務(wù)邏輯模塊包括存儲(chǔ)單元、更新單元、傳輸消息獲取單元以及發(fā)送單
      元(圖中未示出),其中,存儲(chǔ)單元,用于存儲(chǔ)游標(biāo)確認(rèn)信息;更新單元,用于接收根據(jù)發(fā)送的當(dāng)前待傳輸消息返回的游標(biāo)確認(rèn)信息,更新存儲(chǔ)單元中存儲(chǔ)的游標(biāo)確認(rèn)信息,向傳輸消息獲取單元輸出觸發(fā)信息;傳輸消息獲取單元,用于接收觸發(fā)信息,根據(jù)當(dāng)前更新存儲(chǔ)的游標(biāo)確認(rèn)信息,獲取當(dāng)前待傳輸消息,從消息隊(duì)列中讀取當(dāng)前待傳輸消息,輸出至發(fā)送單元;發(fā)送單元,用于獲取接收的當(dāng)前待傳輸消息的配置文件,根據(jù)配置文件中包含的目的客戶(hù)端信息進(jìn)行發(fā)送。本發(fā)明實(shí)施例中,發(fā)送單元中,預(yù)先設(shè)置并存儲(chǔ)有各待傳輸消息的配置文件,配置文件中,配置有待傳輸消息需要發(fā)送的目的客戶(hù)端信息。較佳地,消息處理業(yè)務(wù)邏輯模塊進(jìn)一步包括計(jì)時(shí)單元,用于在發(fā)送單元發(fā)送消息后,進(jìn)行計(jì)時(shí);如果在預(yù)先設(shè)置的計(jì)時(shí)時(shí)間內(nèi),監(jiān)測(cè)到更新單元沒(méi)有接收到客戶(hù)端返回的游標(biāo)確認(rèn)信息,觸發(fā)傳輸消息獲取單元將當(dāng)前存儲(chǔ)的游標(biāo)確認(rèn)信息對(duì)應(yīng)的待傳輸消息進(jìn)行重傳。其中,客戶(hù)端存儲(chǔ)處理成功的消息對(duì)應(yīng)的游標(biāo)確認(rèn)信息;接收消息,獲取接收消息中的游標(biāo)序列號(hào),判斷消息中的游標(biāo)序列號(hào)與存儲(chǔ)的游標(biāo)確認(rèn)信息中包含的游標(biāo)序列號(hào);如果消息中的游標(biāo)序列號(hào)與存儲(chǔ)的游標(biāo)序列號(hào)相同,或者,消息中的游標(biāo)序列號(hào)與存儲(chǔ)的游標(biāo)序列號(hào)相差兩個(gè)以上累加單位,丟棄該消息,向消息處理業(yè)務(wù)邏輯返回存儲(chǔ)的游標(biāo)確認(rèn)信息;如果消息中的游標(biāo)序列號(hào)大于存儲(chǔ)的游標(biāo)序列號(hào)一個(gè)累加單位,處理該消息,在處理成功后,更新存儲(chǔ)的游標(biāo)確認(rèn)信息,向消息處理業(yè)務(wù)邏輯返回更新存儲(chǔ)的游標(biāo)確認(rèn)信
      肩、O較佳地,消息處理業(yè)務(wù)邏輯模塊還可以進(jìn)一步包括判斷單元,用于判斷傳輸消息獲取單元獲取的當(dāng)前待傳輸消息是否位于消息隊(duì)列中最前端,如果是,觸發(fā)發(fā)送單元根據(jù)配置文件中包含的目的客戶(hù)端信息進(jìn)行發(fā)送;否則,觸發(fā)發(fā)送單元根據(jù)當(dāng)前更新存儲(chǔ)的游標(biāo)確認(rèn)信息所屬的客戶(hù)端,將當(dāng)前待傳輸消息發(fā)送至所述游標(biāo)確認(rèn)信息所屬的客戶(hù)端。顯然,本領(lǐng)域技術(shù)人員可以對(duì)本發(fā)明進(jìn)行各種改動(dòng)和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若對(duì)本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也包含這些改動(dòng)和變型在內(nèi)。·
      權(quán)利要求
      1.一種基于持久化消息隊(duì)列傳輸消息的方法,該方法包括 接收待傳輸消息,為待傳輸消息設(shè)置游標(biāo)信息,并將設(shè)置游標(biāo)信息的消息寫(xiě)入消息隊(duì)列; 根據(jù)當(dāng)前更新存儲(chǔ)的游標(biāo)確認(rèn)信息,獲取當(dāng)前待傳輸消息,從消息隊(duì)列中讀取當(dāng)前待傳輸消息,進(jìn)行發(fā)送; 接收根據(jù)發(fā)送的當(dāng)前待傳輸消息返回的游標(biāo)確認(rèn)信息,更新當(dāng)前存儲(chǔ)的游標(biāo)確認(rèn)信肩、O
      2.根據(jù)權(quán)利要求I所述的方法,其中,所述為待傳輸消息設(shè)置游標(biāo)信息包括 判斷當(dāng)前接收的待傳輸消息是否為接收的第一條消息,如果是,為接收的待傳輸消息分配游標(biāo)序列號(hào),并記錄分配的游標(biāo)序列號(hào)信息;如果不是,將記錄的游標(biāo)序列號(hào)進(jìn)行累力口,為待傳輸消息設(shè)置累加的游標(biāo)序列號(hào),記錄累加的游標(biāo)序列號(hào)信息。
      3.根據(jù)權(quán)利要求I所述的方法,其中,所述為待傳輸消息設(shè)置游標(biāo)信息包括 判斷消息隊(duì)列中是否存在寫(xiě)入的消息,如果不存在,為接收的待傳輸消息分配游標(biāo)序列號(hào);如果存在,獲取消息隊(duì)列中當(dāng)前已寫(xiě)入消息的游標(biāo)序列號(hào)信息,對(duì)獲取的游標(biāo)序列號(hào)進(jìn)行累加,為待傳輸消息設(shè)置累加的游標(biāo)序列號(hào)。
      4.根據(jù)權(quán)利要求I至3任一項(xiàng)所述的方法,其中,利用超級(jí)文本預(yù)處理語(yǔ)言開(kāi)發(fā)的消息發(fā)送業(yè)務(wù)邏輯接收所述待傳輸消息。
      5.根據(jù)權(quán)利要求4所述的方法,其中,所述將設(shè)置游標(biāo)信息的消息寫(xiě)入消息隊(duì)列包括 消息發(fā)送業(yè)務(wù)邏輯通過(guò)Memcache add方法,將設(shè)置游標(biāo)序列號(hào)的消息寫(xiě)入消息隊(duì)列。
      6.根據(jù)權(quán)利要求5所述的方法,其中,所述在為待傳輸消息設(shè)置游標(biāo)信息后,將設(shè)置游標(biāo)信息的消息寫(xiě)入消息隊(duì)列之前,進(jìn)一步包括 對(duì)接收的待傳輸消息進(jìn)行分類(lèi),為待傳輸消息設(shè)置消息類(lèi)型信息。
      7.根據(jù)權(quán)利要求I至3任一項(xiàng)所述的方法,其中,所述根據(jù)當(dāng)前更新存儲(chǔ)的游標(biāo)確認(rèn)信息,獲取當(dāng)前待傳輸消息包括 如果當(dāng)前更新存儲(chǔ)的游標(biāo)確認(rèn)信息為空,通過(guò)Memcache get方法,從消息隊(duì)列中讀取最前端的待傳輸消息; 如果當(dāng)前已更新存儲(chǔ)的游標(biāo)確認(rèn)信息不為空,將已更新存儲(chǔ)的游標(biāo)確認(rèn)信息對(duì)應(yīng)的游標(biāo)序列號(hào)進(jìn)行累加,通過(guò)Memcache get方法,從消息隊(duì)列中讀取累加的游標(biāo)序列號(hào)對(duì)應(yīng)的待傳輸消息。
      8.根據(jù)權(quán)利要求7所述的方法,其中,所述從消息隊(duì)列中讀取當(dāng)前待傳輸消息,進(jìn)行發(fā)送包括 預(yù)先設(shè)置并存儲(chǔ)待傳輸消息需要發(fā)送的目的客戶(hù)端信息,生成消息的配置文件; 從消息隊(duì)列中讀取當(dāng)前待傳輸消息,獲取該當(dāng)前待傳輸消息的配置文件; 根據(jù)配置文件中包含的目的客戶(hù)端信息進(jìn)行發(fā)送。
      9.根據(jù)權(quán)利要求8所述的方法,其中,所述方法進(jìn)一步包括 對(duì)存儲(chǔ)的游標(biāo)確認(rèn)信息進(jìn)行分類(lèi),以客戶(hù)端為標(biāo)識(shí)存儲(chǔ)接收的游標(biāo)確認(rèn)信息。
      10.根據(jù)權(quán)利要求9所述的方法,其中,所述在從消息隊(duì)列中讀取當(dāng)前待傳輸消息之后,獲取該當(dāng)前待傳輸消息的配置文件之前,進(jìn)一步包括 如果當(dāng)前待傳輸消息位于消息隊(duì)列中最前端,執(zhí)行獲取該當(dāng)前待傳輸消息的配置文件的步驟; 如果當(dāng)前待傳輸消息不位于消息隊(duì)列中最前端,根據(jù)當(dāng)前更新存儲(chǔ)的游標(biāo)確認(rèn)信息所屬的客戶(hù)端,將當(dāng)前待傳輸消息發(fā)送至所述游標(biāo)確認(rèn)信息所屬的客戶(hù)端。
      11.根據(jù)權(quán)利要求10所述的方法,其中,所述方法進(jìn)一步包括 在發(fā)送消息后,進(jìn)行計(jì)時(shí); 如果在預(yù)先設(shè)置的計(jì)時(shí)時(shí)間內(nèi)沒(méi)有接收到客戶(hù)端返回的游標(biāo)確認(rèn)信息,將當(dāng)前存儲(chǔ)的游標(biāo)確認(rèn)信息對(duì)應(yīng)的待傳輸消息進(jìn)行重傳。
      12.根據(jù)權(quán)利要求I至3任一項(xiàng)所述的方法,其中,所述在發(fā)送消息后,接收根據(jù)發(fā)送的當(dāng)前待傳輸消息返回的游標(biāo)確認(rèn)信息之前,進(jìn)一步包括 進(jìn)行消息處理的客戶(hù)端存儲(chǔ)處理成功的消息對(duì)應(yīng)的游標(biāo)確認(rèn)信息; 接收消息,獲取接收消息中的游標(biāo)序列號(hào),判斷消息中的游標(biāo)序列號(hào)與存儲(chǔ)的游標(biāo)確認(rèn)信息中包含的游標(biāo)序列號(hào); 如果消息中的游標(biāo)序列號(hào)與存儲(chǔ)的游標(biāo)序列號(hào)相同,或者,消息中的游標(biāo)序列號(hào)與存儲(chǔ)的游標(biāo)序列號(hào)相差兩個(gè)以上累加單位,丟棄該消息,向消息處理業(yè)務(wù)邏輯返回存儲(chǔ)的游標(biāo)確認(rèn)信息; 如果消息中的游標(biāo)序列號(hào)大于存儲(chǔ)的游標(biāo)序列號(hào)一個(gè)累加單位,處理該消息,在處理成功后,更新存儲(chǔ)的游標(biāo)確認(rèn)信息,向消息處理業(yè)務(wù)邏輯返回更新存儲(chǔ)的游標(biāo)確認(rèn)信息。
      13.根據(jù)權(quán)利要求12所述的方法,其中,所述方法進(jìn)一步包括 確認(rèn)已接收到消息配置文件中各客戶(hù)端返回的游標(biāo)確認(rèn)信息,刪除消息隊(duì)列中的該消肩、O
      14.一種基于持久化消息隊(duì)列的消息傳輸裝置,其特征在于,該裝置包括消息發(fā)送業(yè)務(wù)邏輯模塊以及消息處理業(yè)務(wù)邏輯模塊,其中, 消息發(fā)送業(yè)務(wù)邏輯模塊,用于接收待傳輸消息,為待傳輸消息設(shè)置游標(biāo)信息,并將設(shè)置游標(biāo)信息的消息寫(xiě)入消息隊(duì)列; 消息處理業(yè)務(wù)邏輯模塊,用于根據(jù)當(dāng)前更新存儲(chǔ)的游標(biāo)確認(rèn)信息,獲取當(dāng)前待傳輸消息,從消息隊(duì)列中讀取當(dāng)前待傳輸消息,進(jìn)行發(fā)送; 接收根據(jù)發(fā)送的當(dāng)前待傳輸消息返回的游標(biāo)確認(rèn)信息,更新當(dāng)前存儲(chǔ)的游標(biāo)確認(rèn)信肩、O
      15.根據(jù)權(quán)利要求14所述的裝置,其特征在于,所述消息處理業(yè)務(wù)邏輯模塊進(jìn)一步用于確認(rèn)已接收到消息配置文件中各客戶(hù)端返回的游標(biāo)確認(rèn)信息,刪除消息隊(duì)列中的該消肩、O
      16.根據(jù)權(quán)利要求14或15所述的裝置,其特征在于,所述消息處理業(yè)務(wù)邏輯模塊包括存儲(chǔ)單元、更新單元、傳輸消息獲取單元以及發(fā)送單元,其中, 存儲(chǔ)單元,用于存儲(chǔ)游標(biāo)確認(rèn)信息; 更新單元,用于接收根據(jù)發(fā)送的當(dāng)前待傳輸消息返回的游標(biāo)確認(rèn)信息,更新存儲(chǔ)單元中存儲(chǔ)的游標(biāo)確認(rèn)信息,向傳輸消息獲取單兀輸出觸發(fā)信息; 傳輸消息獲取單元,用于接收觸發(fā)信息,根據(jù)當(dāng)前更新存儲(chǔ)的游標(biāo)確認(rèn)信息,獲取當(dāng)前待傳輸消息,從消息隊(duì)列中讀取當(dāng)前待傳輸消息,輸出至發(fā)送單元; 發(fā)送單元,用于獲取接收的當(dāng)前待傳輸消息的配置文件,根據(jù)配置文件中包含的目的客戶(hù)端信息進(jìn)行發(fā)送。
      17.根據(jù)權(quán)利要求16所述的裝置,其特征在于,所述消息處理業(yè)務(wù)邏輯模塊進(jìn)一步包括 計(jì)時(shí)單元,用于在發(fā)送單元發(fā)送消息后,進(jìn)行計(jì)時(shí); 如果在預(yù)先設(shè)置的計(jì)時(shí)時(shí)間內(nèi),監(jiān)測(cè)到更新單元沒(méi)有接收到客戶(hù)端返回的游標(biāo)確認(rèn)信息,觸發(fā)傳輸消息獲取單元將當(dāng)前存儲(chǔ)的游標(biāo)確認(rèn)信息對(duì)應(yīng)的待傳輸消息進(jìn)行重傳。
      18.根據(jù)權(quán)利要求16所述的裝置,其特征在于,所述消息處理業(yè)務(wù)邏輯模塊進(jìn)一步包括 判斷單元,用于判斷傳輸消息獲取單元獲取的當(dāng)前待傳輸消息是否位于消息隊(duì)列中最前端,如果是,觸發(fā)發(fā)送單元根據(jù)配置文件中包含的目的客戶(hù)端信息進(jìn)行發(fā)送;否則,觸發(fā)發(fā)送單元根據(jù)當(dāng)前更新存儲(chǔ)的游標(biāo)確認(rèn)信息所屬的客戶(hù)端,將當(dāng)前待傳輸消息發(fā)送至所述游標(biāo)確認(rèn)信息所屬的客戶(hù)端。
      全文摘要
      本發(fā)明公開(kāi)了一種基于持久化消息隊(duì)列傳輸消息的方法及消息傳輸裝置。該方法包括接收待傳輸消息,為待傳輸消息設(shè)置游標(biāo)信息,并將設(shè)置游標(biāo)信息的消息寫(xiě)入消息隊(duì)列;根據(jù)當(dāng)前更新存儲(chǔ)的游標(biāo)確認(rèn)信息,獲取當(dāng)前待傳輸消息,從消息隊(duì)列中讀取當(dāng)前待傳輸消息,進(jìn)行發(fā)送;接收根據(jù)發(fā)送的當(dāng)前待傳輸消息返回的游標(biāo)確認(rèn)信息,更新當(dāng)前存儲(chǔ)的游標(biāo)確認(rèn)信息。應(yīng)用本發(fā)明,可以提高消息處理效率。
      文檔編號(hào)G06F9/44GK102890631SQ20121034004
      公開(kāi)日2013年1月23日 申請(qǐng)日期2012年9月13日 優(yōu)先權(quán)日2012年9月13日
      發(fā)明者湯曉剛 申請(qǐng)人:新浪網(wǎng)技術(shù)(中國(guó))有限公司
      網(wǎng)友詢(xún)問(wèn)留言 已有0條留言
      • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1