張麗+胡常勝+李海峰
摘 要:文章通過利用消息列隊(duì)的MQTT技術(shù)解決了傳統(tǒng)通信協(xié)議的兩個應(yīng)用弊端,即通信邏輯與業(yè)務(wù)邏輯綁定與C/S模型中通信都是針對一類特定的應(yīng)用,因此極大程度地提高了綜合監(jiān)控系統(tǒng)的兼容性,可適應(yīng)不同供應(yīng)商提供的監(jiān)控設(shè)備。
關(guān)鍵詞:消息隊(duì)列;電力隧道;監(jiān)控
中圖分類號:TM714 文獻(xiàn)標(biāo)志碼:A 文章編號:2095-2945(2017)31-0149-02
引言
隨著國家的迅速發(fā)展,電力需求不斷增加,電力電纜數(shù)量也隨之增多。近幾年為了滿足城市化建設(shè)的要求,許多地區(qū)都使用電力隧道來鋪設(shè)電力電纜[1]。電力隧道鋪設(shè)于地下,在日常運(yùn)行中很難了解隧道和電纜的運(yùn)行情況。因此需要對隧道內(nèi)各設(shè)備的運(yùn)行狀況進(jìn)行綜合全方位的實(shí)時監(jiān)控,確保電力隧道安全可靠的運(yùn)行[2]。
電力隧道綜合監(jiān)控主要包括電纜本體檢測,視頻監(jiān)控,隧道環(huán)境監(jiān)控,安全監(jiān)測和應(yīng)急通訊[3]。隨著管理和應(yīng)用需求的變化,監(jiān)控系統(tǒng)還可能增加新的需求或者是子系統(tǒng)。為實(shí)現(xiàn)綜合全面的智能監(jiān)控工作,監(jiān)控系統(tǒng)的各個子系統(tǒng)間需要進(jìn)行可靠高效的數(shù)據(jù)交流?,F(xiàn)有傳統(tǒng)的通信方式(一般采用104協(xié)議)為用戶(Client,C)調(diào)用服務(wù)器(Server,S)信息時需等待服務(wù)器響應(yīng),因此其效率較低。當(dāng)多個子系統(tǒng)間需要大量的實(shí)時信息交換時,傳統(tǒng)通信方式存在諸多弊端,很難滿足多元化信息的通訊需求,而且協(xié)議本身的實(shí)現(xiàn)過程比較繁瑣[7-8]。
為此,本文采用了一種可實(shí)現(xiàn)多個子系統(tǒng)間大量實(shí)時信息交換的通信技術(shù),即消息隊(duì)列技術(shù)(MessageQueuing)[4],來建立電力隧道中的綜合監(jiān)控系統(tǒng)。
1 MQTT技術(shù)
MQTT是基于二進(jìn)制消息的發(fā)布/訂閱編程模式的消息協(xié)議,最早由IBM提出的,如今已經(jīng)成為OASIS規(guī)范。由于規(guī)范很簡單,非常適合需要低功耗和網(wǎng)絡(luò)帶寬有限的IoT場景。
MQTT作為一個通用的消息隊(duì)列框架由眾多客戶端組成,對形成一個由各子系統(tǒng)集成的復(fù)雜系統(tǒng)非常方便。目前支持的開發(fā)語言有:C、C++、Java、.Net、Javascript、PHP、Python等,便于不同廠家、不同語言的二次開發(fā)的實(shí)現(xiàn)。
基于MQTT技術(shù)的消息模型分為以下四個部分:
1.1 消息分發(fā)模型
MQTT是一種基于代理的發(fā)布/訂閱的消息協(xié)議。提供一對多的消息分發(fā),解除應(yīng)用程序耦合。一個發(fā)布者可以對應(yīng)多個訂閱者,當(dāng)發(fā)布者發(fā)生變化的時候,他可以將消息一一通知給所有的訂閱者。這種模式提供了更大的網(wǎng)絡(luò)擴(kuò)展性和更動態(tài)的網(wǎng)絡(luò)拓?fù)?,如圖1所示。
1.2 消息質(zhì)量
MQTT提供三種質(zhì)量的服務(wù):(1)至多一次,可能會出現(xiàn)丟包的現(xiàn)象,應(yīng)用于對實(shí)時性要求不高的情況。例如,應(yīng)用于環(huán)境傳感器時,數(shù)據(jù)丟失一次讀記錄并無太大影響,因?yàn)楹芸煜乱淮巫x記錄就會產(chǎn)生。(2)至少一次,保證包會到達(dá)目的地,但是可能出現(xiàn)重包。(3)正好一次,保證包會到達(dá)目的地,且不會出現(xiàn)重包的現(xiàn)象。這一級別可用于如計(jì)費(fèi)系統(tǒng)等場景,因?yàn)樵谟?jì)費(fèi)系統(tǒng)中消息丟失或重復(fù)可能會導(dǎo)致生成錯誤的費(fèi)用。
1.3 主題名稱
主題名稱(Topicname)用來標(biāo)識已發(fā)布消息信息的渠道。訂閱者用它來確定接收到所關(guān)心的信息。主題名稱是一個分層的結(jié)構(gòu),用斜線“/”作為分隔符。有兩種通配符可以在主題發(fā)布或訂閱時使用,即“#”和“+”。前者可以通配多層結(jié)構(gòu),而后者只能通配一層結(jié)構(gòu)。例如一個topic:“a/b/c”,則“a/+/c”和“a/#”都可以和它相等。發(fā)布不支持模糊匹配,必須是確定的主題。
1.4 遺屬
當(dāng)一個客戶端斷開連接,但卻仍希望客戶端可以發(fā)送它指定的消息,且該消息和普通消息的結(jié)構(gòu)相同,可以通過設(shè)置該位置并填入和信息相關(guān)的內(nèi)容即可。
2 MQTT技術(shù)在隧道綜合監(jiān)控系統(tǒng)中的應(yīng)用
2.1 確定信息交換格式
MQTT保證信息傳輸過程中的可用性和可靠性,但是并不涉及信息本身的內(nèi)容解析。因此子系統(tǒng)間在進(jìn)行信息交互時,首要任務(wù)是確定信息交互的格式。目前,有大量的信息交互格式可供選擇,比較常見的是二進(jìn)制數(shù)據(jù)、簡單文本格式化數(shù)據(jù)、XML和JSON等數(shù)據(jù)格式??筛鶕?jù)不同的應(yīng)用環(huán)境選擇數(shù)據(jù)交換的格式。
為滿足嵌入式的應(yīng)用需求,可以選擇二進(jìn)制的消息格式,如C語言中對應(yīng)的結(jié)構(gòu)體。但是二進(jìn)制交換格式在擴(kuò)展性上比較差,如果需要增加消息內(nèi)容來滿足新的應(yīng)用要求,需要較多的編程和實(shí)現(xiàn)。相較而言,XML和JSON是比較好的信息交換格式,可以實(shí)用于C/S到B/S的眾多應(yīng)用環(huán)境。特別是JSON,在越來越流行的B/S環(huán)境中有著先天的優(yōu)勢。
2.2 規(guī)劃消息分類
MQTT采用訂閱、發(fā)布的方式。發(fā)布者并不關(guān)心消息的接收者。另外,MQTT還可以方便地進(jìn)行一對多的消息廣播。在一個復(fù)雜的系統(tǒng)中,需要對消息的分類進(jìn)行良好的規(guī)劃和組織來滿足靈活的應(yīng)用要求。
消息訂閱的主題是一個通過“/”符號分割所形成的樹形結(jié)構(gòu)。發(fā)布方向固定的一個或者是多個主題發(fā)布消息,接收方通過通配符或訂閱列表可一次性地訂閱一個或者是多個主題。良好的分類可以使得不同信息間的關(guān)系清晰,便于管理與控制。
2.3 安全規(guī)劃
MQTT提供了多個層次的安全特性:(1)網(wǎng)絡(luò)層:可以通過拉專線或者使用VPN來連接設(shè)備與MQTT代理,以提高網(wǎng)絡(luò)傳輸?shù)陌踩?。?)傳輸層:傳輸層使用TLS加密是確保安全的一個好手段,可以防止中間人攻擊(Man-In-The-MiddleAttack)。客戶端證書不但可以作為設(shè)備的身份憑證,還可以用來驗(yàn)證設(shè)備。(3)應(yīng)用層:MQTT還提供客戶標(biāo)識(ClientIdentifier)以及用戶名密碼,在應(yīng)用層驗(yàn)證設(shè)備。
雖然MQTT提供了多重安全設(shè)計(jì),不過也不能絕對保障數(shù)據(jù)的安全。所以在設(shè)計(jì)階段就應(yīng)把安全放在最高優(yōu)先等級。
3 結(jié)束語
本文提出的電力隧道綜合監(jiān)控系統(tǒng)利用MQTT技術(shù)解決了傳統(tǒng)通信協(xié)議的兩個應(yīng)用弊端,即通信邏輯與業(yè)務(wù)邏輯綁定與C/S模型中通信都是針對一類特定的應(yīng)用。因此本文提出的基于消息隊(duì)列技術(shù)的電力隧道綜合監(jiān)控系統(tǒng)可行有效,有助于電力系統(tǒng)安全、穩(wěn)定地運(yùn)行。
參考文獻(xiàn):
[1]馬巍,武欣嶸,鄭翔,等.RabbotMQ實(shí)時監(jiān)控系統(tǒng)中的應(yīng)用[J].軍事通信技術(shù),2017,38(1):82-85.
[2]鐘良驥,桂學(xué)勤,廖海斌,等.基于MQTT的物聯(lián)網(wǎng)平臺設(shè)計(jì)與分析[J].鄖陽師范高等??茖W(xué)校學(xué)報,2014(06):52-55.
[3]姚丹,謝雪松,楊建軍,等.基于MQTT協(xié)議的物聯(lián)網(wǎng)通信系統(tǒng)的研究與實(shí)現(xiàn)[J].信息通信,2016(03):33-35.
[4]消息隊(duì)列MQ技術(shù)的介紹和原理[EB/OL].2010-03-14.endprint