本發(fā)明涉及分布式服務(wù)技術(shù)領(lǐng)域,更具體的說,是涉及一種基于RabbitMQ和Socket.io的平臺(tái)級(jí)聯(lián)方法和系統(tǒng)。
背景技術(shù):
在公安行業(yè)大型信息系統(tǒng)實(shí)施部署過程中,往往需要分布式部署多級(jí)平臺(tái)(國(guó)家級(jí)、省級(jí)、市級(jí)、區(qū)縣級(jí)),而且往往這些平臺(tái)是異構(gòu)的或由不同廠商提供的,因此,在這些跨區(qū)域的、異構(gòu)的多級(jí)平臺(tái)之間建立數(shù)據(jù)交換功能顯得尤為重要。在以往傳統(tǒng)的平臺(tái)數(shù)據(jù)交換方法中,往往是通過數(shù)據(jù)庫(kù)同步、ftp、WebService等技術(shù)進(jìn)行數(shù)據(jù)交換,在數(shù)據(jù)安全性、數(shù)據(jù)保密性、系統(tǒng)性能、系統(tǒng)集成度和并發(fā)性等方面都比較欠缺,尤其是在異構(gòu)平臺(tái)之間實(shí)現(xiàn)方式比較復(fù)雜,需要一一進(jìn)行集成,平臺(tái)之間相互依賴,耦合度過高,平臺(tái)一方發(fā)生網(wǎng)絡(luò)故障、宕機(jī)或維護(hù)期間容易導(dǎo)致其他平臺(tái)出現(xiàn)故障。
技術(shù)實(shí)現(xiàn)要素:
有鑒于此,有必要針對(duì)上述問題,提供一種RabbitMQ和Socket.io的平臺(tái)級(jí)聯(lián)方法和系統(tǒng),能夠?qū)崿F(xiàn)在跨區(qū)域、異構(gòu)的多級(jí)平臺(tái)之間進(jìn)行任務(wù)協(xié)作、信息反饋以及部分業(yè)務(wù)數(shù)據(jù)交換功能,滿足公安部門在合成作戰(zhàn)過程中無縫的數(shù)據(jù)需求。
為了實(shí)現(xiàn)上述目的,本發(fā)明的技術(shù)方案如下:
一種基于RabbitMQ和Socket.io的平臺(tái)級(jí)聯(lián)方法,包括以下步驟:
S1、使用行政區(qū)域劃代碼+平臺(tái)代碼作為隊(duì)列名稱和路由鍵,發(fā)起任務(wù)協(xié)助或反饋協(xié)助信息時(shí),通過指定路由鍵將消息發(fā)送給指定隊(duì)列;各級(jí)平臺(tái)讀取任務(wù)協(xié)助/反饋消息時(shí),通過指定路由鍵從自己的隊(duì)列里讀取消息;
S2、基于Node.js環(huán)境搭建socket.io消息實(shí)時(shí)推送后臺(tái)服務(wù),其他服務(wù)端應(yīng)用程序或客戶端將需要推送的消息以JSON格式提交給socket.io后臺(tái)服務(wù),再由socket.io后臺(tái)服務(wù)將消息推送或廣播給客戶端。
作為優(yōu)選的,所述步驟S1具體包括:
S11、安裝erlang運(yùn)行環(huán)境和RabbitMQ;
S12、初始化RabbitMQ,創(chuàng)建相關(guān)隊(duì)列并綁定路由鍵;
S13、定制開發(fā)消息發(fā)送和消息消費(fèi)方法,并集成到服務(wù)端應(yīng)用程序。
作為優(yōu)選的,所述步驟S12具體包括:通過命令窗口調(diào)用rabbitmqctl命令及相關(guān)參數(shù)依次啟動(dòng)應(yīng)用、創(chuàng)建虛擬機(jī)、添加用戶和綁定權(quán)限、啟動(dòng)web管理程序,完成RabbitMQ初始化基本配置;然后進(jìn)入web管理程序,根據(jù)級(jí)聯(lián)平臺(tái)的實(shí)際情況,結(jié)合以上隊(duì)列及路由鍵命名規(guī)則,創(chuàng)建相關(guān)隊(duì)列并綁定路由鍵。
作為優(yōu)選的,所述S12還包括,添加用戶并綁定權(quán)限。
作為優(yōu)選的,所述步驟S2具體包括:
S21、安裝Node.js和Socket.io模塊;
S22、編寫Socket.io服務(wù)端腳本socketio_server.js,并將該腳本文件放到Node.js安裝根目錄下,然后在命令行窗口運(yùn)行node socketio_server.js啟動(dòng)消息實(shí)時(shí)推送后臺(tái)服務(wù);
S23、服務(wù)端應(yīng)用程序和客戶端通過socket.io提供的跨平臺(tái)的api接口,連接socket.io服務(wù)端,并推送或接收消息。
作為優(yōu)選的,所述步驟S21具體包括:獲取Node.js安裝包并進(jìn)行安裝,在聯(lián)網(wǎng)環(huán)境下通過命令行窗口執(zhí)行npm install socket.io命令安裝Socket.io模塊,執(zhí)行npm install express安裝web容器;或直接拷貝socket.io和express離線包到Node.js安裝目錄下的node_modules子目錄進(jìn)行離線安裝。
作為優(yōu)選的,所述步驟S22具體包括:
S221、加載express、http、socket.io三個(gè)模塊,通過http和express兩個(gè)模塊實(shí)現(xiàn)web容器功能,通過io對(duì)象的of方法綁定路由notify,通過io的on方法監(jiān)聽connection事件;
S222、在io的connection事件回調(diào)函數(shù)里,給回調(diào)參數(shù)socket對(duì)象綁定join、new message、broadcast、disconnect四個(gè)事件;通過join事件監(jiān)聽客戶端的加入,參數(shù)為用戶id、用戶名;通過new message監(jiān)聽客戶端通過emit方法提交的需要發(fā)送的消息,并將消息發(fā)送給指定的用戶,參數(shù)為用戶id列表和消息內(nèi)容;通過broadcast廣播消息給所有在線用戶,參數(shù)為消息內(nèi)容;通過disconnect監(jiān)聽下線的用戶。
作為優(yōu)選的,所述步驟S23中,推送或接收消息具體包括:通過join方法加入會(huì)話,并向服務(wù)器提供用戶信息;通過emit方法提交需要發(fā)送的消息,參數(shù)為事件名稱、用戶列表和消息內(nèi)容;通過綁定new message、broadcast事件接收消息。
一種根據(jù)上述方法進(jìn)行平臺(tái)級(jí)聯(lián)的系統(tǒng),包括RabbitMQ消息中心、客戶端、服務(wù)端應(yīng)用程序;所述RabbitMQ消息中心用于在Node.js環(huán)境下通過Socket.io實(shí)現(xiàn)跨平臺(tái)的消息實(shí)時(shí)推送,所述客戶端和服務(wù)端應(yīng)用程序通過socket.io提供的跨平臺(tái)的api接口連接RabbitMQ消息中心,并通過join方法加入會(huì)話,并向服務(wù)器提供用戶信息;通過emit方法提交需要發(fā)送的消息,參數(shù)為事件名稱(newmessage、broadcast)、用戶列表和消息內(nèi)容;通過綁定new message、broadcast事件接收消息。
與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果在于:通過基于Node.js環(huán)境的Socket.io實(shí)現(xiàn)跨平臺(tái)的消息實(shí)時(shí)推送,通過基于Node.js環(huán)境的Express實(shí)現(xiàn)基于事件驅(qū)動(dòng)非阻塞I/O模型的Web容器,通過JSON實(shí)現(xiàn)輕量級(jí)的數(shù)據(jù)交換,克服了傳統(tǒng)數(shù)據(jù)交換方法在數(shù)據(jù)安全性、數(shù)據(jù)保密性、系統(tǒng)性能、系統(tǒng)集成度和并發(fā)性等方面的缺點(diǎn),提供了一種基于RabbitMQ和Socket.io的平臺(tái)級(jí)聯(lián)方法,該方法能夠?qū)崿F(xiàn)在跨區(qū)域、異構(gòu)的多級(jí)平臺(tái)之間進(jìn)行任務(wù)協(xié)作、信息反饋以及部分業(yè)務(wù)數(shù)據(jù)交換功能,滿足公安部門在合成作戰(zhàn)過程中無縫的數(shù)據(jù)需求。
附圖說明
圖1為本發(fā)明實(shí)施例方法流程圖;
圖2為本發(fā)明實(shí)施例系統(tǒng)實(shí)施示意圖;
圖3為本發(fā)明實(shí)施例系統(tǒng)結(jié)構(gòu)框圖。
具體實(shí)施方式
下面結(jié)合附圖和實(shí)施例對(duì)本發(fā)明所述的一種RabbitMQ和Socket.io的平臺(tái)級(jí)聯(lián)方法和系統(tǒng)作進(jìn)一步說明。
以下是本發(fā)明所述的一種RabbitMQ和Socket.io的平臺(tái)級(jí)聯(lián)方法和系統(tǒng)的最佳實(shí)例,并不因此限定本發(fā)明的保護(hù)范圍。
圖1示出了一種基于RabbitMQ和Socket.io的平臺(tái)級(jí)聯(lián)方法,如圖2所示,平臺(tái)一服務(wù)器和平臺(tái)二服務(wù)器通過RabbitMQ實(shí)現(xiàn)應(yīng)用程序?qū)?yīng)用程序的通信,通過基于Node.js環(huán)境的Socket.io實(shí)現(xiàn)跨平臺(tái)的消息實(shí)時(shí)推送,通過基于Node.js環(huán)境的Express實(shí)現(xiàn)基于事件驅(qū)動(dòng)非阻塞I/O模型的Web容器,通過JSON實(shí)現(xiàn)輕量級(jí)的數(shù)據(jù)交換,包括以下步驟:
S1、使用行政區(qū)域劃代碼(6位)+平臺(tái)代碼(2位)作為隊(duì)列名稱和路由鍵(RoutingKey),發(fā)起任務(wù)協(xié)助或反饋協(xié)助信息時(shí),通過指定RoutingKey將消息發(fā)送給指定隊(duì)列(queue);各級(jí)平臺(tái)讀取任務(wù)協(xié)助/反饋消息時(shí),通過指定RoutingKey從自己的隊(duì)列(queue)里讀取消息;
S2、基于Node.js環(huán)境搭建socket.io消息實(shí)時(shí)推送后臺(tái)服務(wù),其他服務(wù)端應(yīng)用程序或客戶端將需要推送的消息以JSON格式提交給socket.io后臺(tái)服務(wù),再由socket.io后臺(tái)服務(wù)將消息推送或廣播給客戶端。
作為優(yōu)選的,所述步驟S1具體包括:
S11、安裝erlang運(yùn)行環(huán)境和RabbitMQ;從官方網(wǎng)站獲取erlang和RabbitMQ安裝包,然后依次安裝erlang運(yùn)行環(huán)境和RabbitMQ;
S12、初始化RabbitMQ,創(chuàng)建相關(guān)隊(duì)列并綁定路由鍵;
S13、定制開發(fā)消息發(fā)送和消息消費(fèi)方法,通過RabbitMQ官方提供的api(c++、java或c#.net等開發(fā)語言)定制開發(fā)消息發(fā)送和消息消費(fèi)兩個(gè)方法,并集成到服務(wù)端應(yīng)用程序。
作為優(yōu)選的,所述步驟S12具體包括:通過命令行窗口調(diào)用rabbitmqctl命令及相關(guān)參數(shù)依次啟動(dòng)應(yīng)用、創(chuàng)建虛擬機(jī)、添加用戶和綁定權(quán)限、啟動(dòng)web管理程序(端口為15672,后臺(tái)服務(wù)端口為5672),完成RabbitMQ初始化基本配置;然后進(jìn)入web管理程序,根據(jù)級(jí)聯(lián)平臺(tái)的實(shí)際情況和以上隊(duì)列和路由鍵命名規(guī)則,創(chuàng)建相關(guān)隊(duì)列并綁定路由鍵。
作為優(yōu)選的,所述S12還包括,添加用戶并綁定權(quán)限。
作為優(yōu)選的,所述步驟S2具體包括:
S21、安裝Node.js和Socket.io模塊;基于Node.js環(huán)境搭建socket.io消息實(shí)時(shí)推送后臺(tái)服務(wù),其他服務(wù)端應(yīng)用程序或客戶端將需要推送的消息以JSON格式提交給socket.io后臺(tái)服務(wù),再由socket.io后臺(tái)服務(wù)將消息推送或廣播給客戶端,包括移動(dòng)終端(android、ios)、C/S客戶端、B/S客戶端等;
S22、編寫Socket.io服務(wù)端腳本socketio_server.js,并將該腳本文件放到Node.js安裝根目錄下,然后在命令行窗口運(yùn)行node socketio_server.js啟動(dòng)消息實(shí)時(shí)推送后臺(tái)服務(wù)(端口為15670);
S23、服務(wù)端應(yīng)用程序和客戶端通過socket.io提供的跨平臺(tái)的api接口,連接socket.io服務(wù)端,并推送或接收消息。
作為優(yōu)選的,所述步驟S21具體包括:從官方網(wǎng)站獲取獲取Node.js安裝包并進(jìn)行安裝,在聯(lián)網(wǎng)環(huán)境下通過命令行窗口執(zhí)行npm install socket.io命令安裝Socket.io模塊,執(zhí)行npm install express安裝web容器;或直接拷貝socket.io和express離線包到Node.js安裝目錄下的node_modules子目錄進(jìn)行離線安裝(內(nèi)網(wǎng)環(huán)境)。
作為優(yōu)選的,所述步驟S22具體包括:
S221、通過http和express兩個(gè)模塊實(shí)現(xiàn)web容器功能:實(shí)例化express對(duì)象(變量名為app),通過http的createServer方法(參數(shù)為app)實(shí)例化server對(duì)象(變量名為server),通過server對(duì)象的listen方法監(jiān)聽15670端口,接收客戶端請(qǐng)求;實(shí)例化socket.io對(duì)象(變量名為io,參數(shù)為server),通過io對(duì)象的of方法綁定路由notify,通過io的on方法監(jiān)聽connection事件;
S222、在io的connection事件回調(diào)函數(shù)里,給回調(diào)參數(shù)socket對(duì)象綁定join、new message、broadcast、disconnect四個(gè)事件。通過join事件監(jiān)聽客戶端的加入,參數(shù)為用戶id、用戶名;通過new message監(jiān)聽客戶端通過emit方法提交的需要發(fā)送的消息,并將消息發(fā)送給指定的用戶,參數(shù)為用戶id列表和消息內(nèi)容;通過broadcast廣播消息給所有在線用戶,參數(shù)為消息內(nèi)容;通過disconnect監(jiān)聽下線的用戶。
作為優(yōu)選的,所述步驟S23中,推送或接收消息具體包括:服務(wù)端應(yīng)用程序和客戶端(web客戶端、移動(dòng)客戶端、C/S客戶端)通過socket.io提供的跨平臺(tái)的api接口,連接socket.io服務(wù)端:通過join方法加入會(huì)話,并向服務(wù)器提供用戶信息;通過emit方法提交需要發(fā)送的消息,參數(shù)為事件名稱(new message、broadcast)、用戶列表和消息內(nèi)容;通過綁定new message、broadcast事件接收消息。
圖3示出了一種根據(jù)上述方法進(jìn)行平臺(tái)級(jí)聯(lián)的系統(tǒng),包括RabbitMQ消息中心、客戶端、服務(wù)端應(yīng)用程序;所述RabbitMQ消息中心用于在Node.js環(huán)境下通過Socket.io實(shí)現(xiàn)跨平臺(tái)的消息實(shí)時(shí)推送,所述客戶端和服務(wù)端應(yīng)用程序通過socket.io提供的跨平臺(tái)的api接口連接RabbitMQ消息中心,并通過join方法加入會(huì)話,并向服務(wù)器提供用戶信息;通過emit方法提交需要發(fā)送的消息,參數(shù)為事件名稱(new message、broadcast)、用戶列表和消息內(nèi)容;通過綁定newmessage、broadcast事件接收消息。
與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果在于:通過基于Node.js環(huán)境的Socket.io實(shí)現(xiàn)跨平臺(tái)的消息實(shí)時(shí)推送,通過基于Node.js環(huán)境的Express實(shí)現(xiàn)基于事件驅(qū)動(dòng)非阻塞I/O模型的Web容器,通過JSON實(shí)現(xiàn)輕量級(jí)的數(shù)據(jù)交換,克服了傳統(tǒng)數(shù)據(jù)交換方法在數(shù)據(jù)安全性、數(shù)據(jù)保密性、系統(tǒng)性能、系統(tǒng)集成度和并發(fā)性等方面的缺點(diǎn),提供了一種基于RabbitMQ和Socket.io的平臺(tái)級(jí)聯(lián)方法,該方法能夠?qū)崿F(xiàn)在跨區(qū)域、異構(gòu)的多級(jí)平臺(tái)之間進(jìn)行任務(wù)協(xié)作、信息反饋以及部分業(yè)務(wù)數(shù)據(jù)交換功能,滿足公安部門在合成作戰(zhàn)過程中無縫的數(shù)據(jù)需求。
以上所述實(shí)施例僅表達(dá)了本發(fā)明的幾種實(shí)施方式,其描述較為具體和詳細(xì),但并不能因此而理解為對(duì)本發(fā)明專利范圍的限制。應(yīng)當(dāng)指出的是,對(duì)于本領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干變形和改進(jìn),這些都屬于本發(fā)明的保護(hù)范圍。因此,本發(fā)明專利的保護(hù)范圍應(yīng)以所附權(quán)利要求為準(zhǔn)。