一種基于Redis管道通信的消息傳遞方法及系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計算機技術(shù)領(lǐng)域,尤其涉及一種基于Redis管道通信的消息傳遞方法及系統(tǒng)。
【背景技術(shù)】
[0002]Redis是一個開源、支持網(wǎng)絡、基于內(nèi)存的鍵值對存儲數(shù)據(jù)庫,支持多種數(shù)據(jù)類型和多種操作,具有強大的管理數(shù)據(jù)的功能。Redis的出現(xiàn),很大程度補償了memcached這類key/value存儲的不足,在部分場合可以對關(guān)系數(shù)據(jù)庫起到很好的補充作用。它提供了Java、C/C++、C#、PHP、JavaScript、Perl、Ob ject_C、Python、Ruby、Er Iang 等客戶端,使用很方便。Redis由于它的高性能和簡單的操作命令,完全可以作為軟件和傳統(tǒng)數(shù)據(jù)庫之間的緩沖作用,在保證了數(shù)據(jù)有效性的情況下,同時也保證了高性能。
[0003]Redis支持主從同步。數(shù)據(jù)可以從主服務器向任意數(shù)量的從服務器上同步,從服務器可以是關(guān)聯(lián)其他從服務器的主服務器。這使得Redis可執(zhí)行單層樹復制。存盤可以有意無意的對數(shù)據(jù)進行寫操作。由于完全實現(xiàn)了發(fā)布/訂閱機制,使得從數(shù)據(jù)庫在任何地方同步樹時,可訂閱一個頻道并接收主服務器完整的消息發(fā)布記錄。同步對讀取操作的可擴展性和數(shù)據(jù)冗余很有幫助。
[0004]目前一般平臺的消息傳遞主要通過將數(shù)據(jù)存入關(guān)系型數(shù)據(jù)庫,然后由業(yè)務處理平臺從數(shù)據(jù)庫中讀取數(shù)據(jù)、緩存、過濾、解析再傳輸?shù)接脩糗浖巷@示。存在的問題在于:
[0005]1、數(shù)據(jù)庫的讀寫不分離,互斥鎖會導致讀寫效率低下,業(yè)務處理平臺負載均衡的服務器數(shù)目越多,數(shù)據(jù)訪問越頻繁,讀取越慢;
[0006]2、業(yè)務數(shù)據(jù)整存整取,業(yè)務處理平臺會取到較多的冗余數(shù)據(jù),增加了業(yè)務處理平臺的數(shù)據(jù)處理壓力。
【發(fā)明內(nèi)容】
[0007]本發(fā)明要解決的技術(shù)問題之一,在于提供一種基于Redis管道通信的消息傳遞方法,使得消息能快速有效的傳輸;本方法支持自動故障轉(zhuǎn)移功能;可讀寫分離,支持負載均衡,可無限擴容。
[0008]本發(fā)明的問題之一,是這樣實現(xiàn)的:
[0009]一種基于Redis管道通信的消息傳遞方法,包括如下步驟:
[0010]步驟1、啟動接收服務器,接收數(shù)據(jù)消息并讀取基礎數(shù)據(jù),將該數(shù)據(jù)消息、其接口及該基礎數(shù)據(jù)進行封裝,并將封裝后的數(shù)據(jù)消息進行分類,調(diào)用發(fā)布指令,并根據(jù)該數(shù)據(jù)消息的類型將該數(shù)據(jù)消息發(fā)布到Redis服務器的不同通道中;同時,將封裝后的基礎數(shù)據(jù)存儲至Redis服務器內(nèi);
[0011]步驟2、業(yè)務處理平臺發(fā)送訂閱指令給Redis服務器,Redis服務器接收該訂閱指令后,將相應通道中的數(shù)據(jù)消息傳輸給業(yè)務處理平臺;同時,業(yè)務處理平臺從Redis服務器獲取基本數(shù)據(jù);
[0012]步驟3、業(yè)務處理平臺將訂閱后的數(shù)據(jù)消息進行過濾;
[0013]步驟4、業(yè)務處理平臺使用封裝好的接口將過濾后的數(shù)據(jù)消息的格式直接轉(zhuǎn)換為用業(yè)務處理平臺來解讀的對象格式后,根據(jù)基礎數(shù)據(jù)將過濾后的數(shù)據(jù)消息進行解析;
[0014]步驟5、業(yè)務處理平臺獲取解析后的數(shù)據(jù)消息,并將該數(shù)據(jù)消息傳輸?shù)接脩糗浖M行顯示。
[0015]進一步地,所述接收服務器及業(yè)務處理平臺與Redis服務器的連接方式具體為:
[0016]接收服務器與業(yè)務處理平臺均使用Redis連接池與Redis服務器進行Redis連接,如果Redis Sentinel集群監(jiān)控到Redis服務器發(fā)生故障,說明Redis連接中斷,貝IjRedis連接池將等待Redis Sentinel集群進行自動的故障轉(zhuǎn)移切換,若切換成功,則重新創(chuàng)建Redis連接進行數(shù)據(jù)消息的傳輸,若切換不成功,則結(jié)束流程;如果Redis服務器不發(fā)生故障,則說明Redis連接不中斷,則Redis Sentinel集群不進行故障轉(zhuǎn)移切換。
[0017]進一步地,所述步驟I中將該數(shù)據(jù)消息及其接口進行封裝具體為:
[0018]將數(shù)據(jù)消息封裝為json格式字符串,并將其接口封裝為json序列化接口。
[0019]進一步地,所述步驟I中所述數(shù)據(jù)消息的類型包括最新位置信息類型、報警信息類型、圖片信息類型、外設信息類型和應答信息及其他業(yè)務數(shù)據(jù)類型。
[0020]本發(fā)明要解決的技術(shù)問題之二,在于提供一種基于Redis管道通信的消息傳遞系統(tǒng),使得消息能快速有效的傳輸;本方法支持自動故障轉(zhuǎn)移功能;可讀寫分離,支持負載均衡,可無限擴容。
[0021 ]本發(fā)明的問題之二,是這樣實現(xiàn)的:
[0022]一種基于Redis管道通信的消息傳遞系統(tǒng),包括:
[0023]數(shù)據(jù)消息接收模塊,用于啟動接收服務器,接收數(shù)據(jù)消息并讀取基礎數(shù)據(jù),將該數(shù)據(jù)消息、其接口及該基礎數(shù)據(jù)進行封裝,并將封裝后的數(shù)據(jù)消息進行分類,調(diào)用發(fā)布指令,并根據(jù)該數(shù)據(jù)消息的類型將該數(shù)據(jù)消息發(fā)布到Redis服務器的不同通道中;同時,將封裝后的基礎數(shù)據(jù)存儲至Redis服務器內(nèi);
[0024]數(shù)據(jù)消息傳輸模塊,用于業(yè)務處理平臺發(fā)送訂閱指令給Redis服務器,Redis服務器接收該訂閱指令后,將相應通道中的數(shù)據(jù)消息傳輸給業(yè)務處理平臺;同時,業(yè)務處理平臺從Redis服務器獲取基本數(shù)據(jù);
[0025]數(shù)據(jù)消息過濾模塊,用于業(yè)務處理平臺將訂閱后的數(shù)據(jù)消息進行過濾;
[0026]數(shù)據(jù)消息解析模塊,用于業(yè)務處理平臺使用封裝好的接口將過濾后的數(shù)據(jù)消息的格式直接轉(zhuǎn)換為用業(yè)務處理平臺來解讀的對象格式后,根據(jù)基礎數(shù)據(jù)將過濾后的數(shù)據(jù)消息進行解析;
[0027]數(shù)據(jù)消息顯示模塊,用于業(yè)務處理平臺獲取解析后的數(shù)據(jù)消息,并將該數(shù)據(jù)消息傳輸?shù)接脩糗浖M行顯示。
[0028]進一步地,所述接收服務器及業(yè)務處理平臺與Redis服務器的連接方式具體為:
[0029]接收服務器與業(yè)務處理平臺均使用Redis連接池與Redis服務器進行Redis連接,如果Redis Sentinel集群監(jiān)控到Redis服務器發(fā)生故障,說明Redis連接中斷,貝IjRedis連接池將等待Redis Sentinel集群進行自動的故障轉(zhuǎn)移切換,若切換成功,則重新創(chuàng)建Redis連接進行數(shù)據(jù)消息的傳輸,若切換不成功,則結(jié)束切換;如果Redis服務器不發(fā)生故障,則說明Redis連接不中斷,則Redis Sentinel集群不進行故障轉(zhuǎn)移切換。
[0030]進一步地,所述數(shù)據(jù)消息接收模塊中將該數(shù)據(jù)消息及其接口進行封裝具體為:
[0031 ]將數(shù)據(jù)消息封裝為json格式字符串,并將其接口封裝為json序列化接口。
[0032]進一步地,所述數(shù)據(jù)消息接收模塊中所述數(shù)據(jù)消息的類型包括最新位置信息類型、報警信息類型、圖片信息類型、外設信息類型和應答信息及其他業(yè)務數(shù)據(jù)類型。
[0033]本發(fā)明具有如下優(yōu)點:
[0034]本發(fā)明的一種基于Redis管道通信的消息傳遞方法是一種平臺間大規(guī)模數(shù)據(jù)消息穩(wěn)定有效的傳輸?shù)姆椒?,通過Redis管道通信將數(shù)據(jù)按照類型發(fā)布到不同的管道,業(yè)務處理平臺只需要根據(jù)配置偵聽對應類型的管道,收取需要的數(shù)據(jù),減少了數(shù)據(jù)的冗余;在本方法中,業(yè)務處理服務和接收服務所使用的Redis連接池可以支持Redis主從集群,保證了數(shù)據(jù)讀寫分離,實現(xiàn)了數(shù)據(jù)的高效傳輸;還提供了利用Redis Sentinel故障監(jiān)控集群搭建的Redis集群故障自動迀移系統(tǒng),根據(jù)Redis Sentinel上報的當前主服務器master所使用的ip、端口創(chuàng)建Redis Client可讀寫連接發(fā)布數(shù)據(jù)消息,根據(jù)Redis Sentinel上報