張朝蘭 姜孝均 易大江
摘要:MQTT協(xié)議作為一種即時通信協(xié)議,在未來物聯(lián)網(wǎng)技術(shù)的建設(shè)與發(fā)展中,將會成為其最為重要的組成部分,基于搭建完成的平臺連接外部和聯(lián)網(wǎng)的設(shè)備,充當通信橋梁的作用。本文從MQTT協(xié)議角度出發(fā),從物模型與主題模型設(shè)計、設(shè)備狀態(tài)管理設(shè)計、消息路由模塊設(shè)計、系統(tǒng)安全模塊設(shè)計、系統(tǒng)集群模塊設(shè)計等五個角度,系統(tǒng)分析了基于MQTT協(xié)議的物聯(lián)網(wǎng)文件傳輸系統(tǒng),探究物聯(lián)網(wǎng)文件傳輸?shù)膶崿F(xiàn)路徑。
關(guān)鍵詞:MQTT協(xié)議;物聯(lián)網(wǎng)文件;消息傳輸
引言
在智能電網(wǎng)、智能家居、智慧農(nóng)業(yè)、智慧交通、智慧城市、智慧醫(yī)療和智能電網(wǎng)等領(lǐng)域中,物聯(lián)網(wǎng)終端設(shè)備利用多種多樣的連接方式實現(xiàn)連接,提高設(shè)備和云服務(wù)器之間的聯(lián)系強度?;谠破脚_提供的通信服務(wù)、設(shè)備管理、分析服務(wù)和數(shù)據(jù)存儲功能,實現(xiàn)不同網(wǎng)絡(luò)范圍內(nèi)、不同區(qū)域范圍內(nèi)的各類終端設(shè)備信息交互和數(shù)據(jù)共享,基于“云+端”架構(gòu)的物聯(lián)網(wǎng)體系逐漸成為現(xiàn)代互聯(lián)網(wǎng)體系的經(jīng)典架構(gòu)[1]。目前,物聯(lián)網(wǎng)技術(shù)仍舊處于發(fā)展的初期階段,很多物聯(lián)網(wǎng)技術(shù)存在的問題尚未獲得解決,網(wǎng)絡(luò)數(shù)據(jù)傳輸實施規(guī)范還缺乏統(tǒng)一性。IBM開發(fā)的MQTT輕量級信息傳輸協(xié)議,憑借其傳輸可靠、高及時性、小成本支出優(yōu)勢在各類物聯(lián)網(wǎng)場景中廣泛應(yīng)用,成為物聯(lián)網(wǎng)通信協(xié)議標準的競爭者[2][3]。
1. MQTT協(xié)議實現(xiàn)方式
1.1 MQTT協(xié)議特點
MQTT協(xié)議作為一種傳輸消息的協(xié)議類型,是以主題訂閱模型和消息發(fā)布模型為基礎(chǔ)的,通信功能的實現(xiàn)則憑借客戶端/服務(wù)器架構(gòu),秉承輕量級、開放性和簡單性原則,在有限設(shè)備資源、低帶寬和不穩(wěn)定網(wǎng)絡(luò)環(huán)境下都具有適應(yīng)性,可以為物聯(lián)網(wǎng)應(yīng)用提供支持。在對各種類型的信息進行組織和傳輸時,必須要以實現(xiàn)主題結(jié)構(gòu)層次作為依據(jù)。作為信息的發(fā)布人員,要在信息傳輸?shù)倪^程中將新數(shù)據(jù)信息進行分發(fā),在代理中高效地連接數(shù)據(jù)信息。在此之后,借助使用代理的方式將獲得的信息分發(fā)給已經(jīng)訂閱該主題的全部客戶端[4]。MQTT協(xié)議特點表現(xiàn)在以下五個方面:
第一,MQTT協(xié)議具有比較小的開銷,在固定頭部的位置處,僅僅有兩個字節(jié)存在,同時還可以使得協(xié)議交換最小化處理,大幅度降低網(wǎng)絡(luò)流量的消耗量。
第二,在網(wǎng)絡(luò)中傳輸MQTT消息,可以屏蔽負載內(nèi)容,實現(xiàn)不同類型的信息傳輸目標。
第三,MQTT協(xié)議以消息訂閱和發(fā)布模式作為基礎(chǔ),可以比較方便地實現(xiàn)消息一對多發(fā)布與傳輸,將通信訂閱方和通信發(fā)布方之間的耦合解除。
第四,MQTT協(xié)議交付的信息質(zhì)量可以分為三種級別,一次正好、一次至少、一次至多??梢砸韵⒌膶嶋H傳輸需求作為依據(jù),將信息的訂閱者和發(fā)布者信息按照其需求傳輸?shù)侥康牡豙5]。
第五,MQTT協(xié)議可提供Testament機制,又被稱作為Last Will機制,在運行服務(wù)期間若是出現(xiàn)了客戶端異常斷開現(xiàn)象,此時服務(wù)器將會把相關(guān)通知到相關(guān)終端完成信息傳輸。
1.2 MQTT協(xié)議通信原理
MQTT協(xié)議在發(fā)布和訂閱信息時是以主題作為依據(jù)的。發(fā)揮主題的作用構(gòu)建完成發(fā)布信息方和訂閱信息方之間的信息傳輸路徑。主題主要是指在應(yīng)用消息上的附加標簽,MQTT客戶端和MQTT消息代理服務(wù)器組合形成MQTT協(xié)議,在圖1中展示的是MQTT協(xié)議基本結(jié)構(gòu)。
在圖1中,MQTT客戶端既可以是消息的訂閱者,又可以是消息的發(fā)布者,是MQTT設(shè)備或者程序。消息的發(fā)布者可以將應(yīng)用消息發(fā)布到消息代理中,消息的訂閱者可以面向消息代理訂閱請求接受感興趣的消息,或者將不需要的訂閱內(nèi)容取消。在請求訂閱消息客戶端和發(fā)送消息客戶端之間,MQTT消息代理服務(wù)器發(fā)揮著中介作用,將客戶端發(fā)布的應(yīng)用消息和客戶端連接請求予以接收,將訂閱的請求取消和將客戶端的訂閱信息做出處理,除此之外還可將應(yīng)用信息或者符合條件的信息轉(zhuǎn)發(fā)到客戶端。
2. MQTT協(xié)議中的功能
2.1 訂閱功能
訂閱(Subscription)功能主要包括最大服務(wù)質(zhì)量(QoS)和主題篩選器,訂閱功能會與會話功能形成關(guān)聯(lián)。
2.2 會話功能
將服務(wù)器和客戶端之間構(gòu)建連接以后,將會得到會話(Session)。服務(wù)器和客戶端之間存在狀態(tài)交互現(xiàn)象,在網(wǎng)絡(luò)之中必然會存在會話功能,同時在服務(wù)器和客戶端相互之間連接,可以跨越多個連續(xù)網(wǎng)絡(luò)實現(xiàn)[6]。
當Clean Session處于0的位置時,代理服務(wù)器此時就必須要以當前會話狀態(tài)作為基礎(chǔ),將與客戶端之間的通信路徑予以恢復。若是服務(wù)器端所保存的會話出現(xiàn)丟失,那么要在最短時間完成新的會話構(gòu)建,從而可以確保將會話信息進行保存。當斷開會話的時間段內(nèi),服務(wù)器設(shè)備要客戶端定遠的交付質(zhì)量級別為QoS 1和 QoS 2的消息作為狀態(tài)信息予以保存,當客戶端再次登錄上線之后,保存的信息將會通過服務(wù)器傳輸?shù)娇蛻舳恕T僬?,當消息在傳輸?shù)倪^程中出現(xiàn)信息中斷現(xiàn)象,此時會話的信息也會被保存,一直持續(xù)到客戶端重新與服務(wù)器完成連接。當Clean Session處于1的位置時,代理服務(wù)器必須要將保存的客戶端信息全部丟棄,等待客戶端重新連接上線之后,也不會再將舊有的消息進行接收,而是要重新訂閱。設(shè)置這樣的標志位主要是為了保證QoS 1和 QoS 2消息具有良好的服務(wù)質(zhì)量,同時當標志位為0的時候,客戶端不會將所有交付質(zhì)量為QoS 1和 QoS 2的信息漏接。
2.3 主題名功能
與應(yīng)用程序消息的標簽進行連接,合理地匹配服務(wù)器訂閱和標簽。服務(wù)器可以將信息傳輸?shù)接嗛喌仄ヅ錁撕灥娜靠蛻艚K端[7]。系統(tǒng)主題名(Topic Name):通過定義開頭主題得到系統(tǒng)的客戶端連接數(shù)量等多種系統(tǒng)信息。
2.4 主題篩選功能
一個主題命名通配符篩選器,即主題篩選器(Topic Fiter),可以應(yīng)用在訂閱表達式中,用以完成所匹配的多個主題訂閱。多級匹配符#單級匹配符+更多主題討論。
2.5 負載功能
消息訂閱者所具體接收的內(nèi)容。
3. 基于MQTT協(xié)議的物聯(lián)網(wǎng)文件傳輸系統(tǒng)設(shè)計
3.1 物模型與主題模型設(shè)計
使用物聯(lián)網(wǎng)消息系統(tǒng)對復合設(shè)備進行描述時,定義設(shè)備可選擇使用物模型實現(xiàn)。根據(jù)物模型的定義,其本質(zhì)是JSON格式類型的文件。物模型屬于物理空間中的實體,在云端可以利用數(shù)字化的方式將工廠、樓宇、車載裝置、傳感器等表示出來,從事件、服務(wù)和屬性三個角度對實體的定義、功能、價值做出描述。
3.2 設(shè)備狀態(tài)管理設(shè)計
請求處理訂閱、推動和取消訂閱等業(yè)務(wù)、使用系統(tǒng)完成其他類型業(yè)務(wù)的時候,必須要以長期構(gòu)建穩(wěn)定的系統(tǒng)和物聯(lián)網(wǎng)設(shè)備連接作為基礎(chǔ)。當設(shè)備處于運行環(huán)節(jié)中,將會憑借與系統(tǒng)搭建完成的聯(lián)系將合法的信息傳輸?shù)较到y(tǒng)中,并且還會建立合法的連接實現(xiàn)請求的發(fā)送與接收。在上述環(huán)節(jié)中,系統(tǒng)首先會詳細地驗證與處理MQTT協(xié)議版本的信息,同時以處理得到的結(jié)果作為依據(jù),應(yīng)用設(shè)備認證接口系統(tǒng)性的驗證和處理設(shè)備的身份信息,利用合理的分析結(jié)果和處理數(shù)據(jù),科學化地規(guī)避非法設(shè)備在連接過程中出現(xiàn)的不良現(xiàn)象[8]。
倘若系統(tǒng)處于運行的時候伴隨著clientid會話信息的出現(xiàn),按照系統(tǒng)的服務(wù)需求要將建立完成的clientid連接斷開,同時還應(yīng)該徹底清理之前的會話信息,釋放出服務(wù)器資源,建立完成與之前請求的連接。若是設(shè)備在運行的時候出現(xiàn)離線消息,憑借MQTT協(xié)議還能夠?qū)崿F(xiàn)離線消息推動。
與Redis存儲會話數(shù)據(jù)的優(yōu)勢和系統(tǒng)開發(fā)進行結(jié)合,選擇應(yīng)用Redis完成Session信息存儲架構(gòu)設(shè)計。所有的客戶端在與系統(tǒng)進行連接的時候,按照系統(tǒng)的服務(wù)要求,必須要設(shè)計、構(gòu)建并使用具有唯一性的客戶端標識,以標識作為基礎(chǔ)區(qū)別化地處理在系統(tǒng)中的全部連接。在全部的服務(wù)器內(nèi)部完成連接信息和設(shè)備標識的對應(yīng)關(guān)系存儲,其中連接信息主要包含有MQTT協(xié)議的Netty中上下文信息、Clean Session標志位信息等。
3.3 消息路由模塊設(shè)計
HBase本身不會為系統(tǒng)提供消息列隊功能,但是在實際應(yīng)用期間可以憑借其所具有的特性將虛擬隊列的概念予以實現(xiàn)。在離線信息接收模塊設(shè)計期間,需要為所有的客戶端完成唯一ID分配,由此可保證組合單調(diào)遞增ID和QUEUE ID形具有唯一性的Roekey。與此同時,為了確保能夠均勻地寫入,規(guī)避出現(xiàn)任何數(shù)據(jù)熱點方面的問題,與設(shè)計優(yōu)化Rowkey原理進行結(jié)合,對唯一的ID前綴做出合理的設(shè)計,在不同的Region中均勻地分布完成Rowkey。
為了確保有序地寫入消息,需要將唯一的ID分配給所有設(shè)備所有離線消息,例如設(shè)備sitech第208條信息分配的ID為sitech_208。以批量的方式寫入消息,首先要使用枷鎖操作對每個隊列做出處理,其次為所有的消息分配ID,在HBase中寫入離線消息,隨后將所有隊列的鎖釋放。這種方法在實際應(yīng)用期間可以確保多個服務(wù)節(jié)點在并發(fā)地將寫入的消息傳輸?shù)皆O(shè)備離線消息隊列的時候不再出現(xiàn)數(shù)據(jù)方面的沖突[9]。
當QoS為0的時候,消息在進行分發(fā)的時候需要以基層網(wǎng)絡(luò)能力作為依據(jù),但是信息的發(fā)布人員只能夠發(fā)布一次消息,并且信息的接收人員不能對接收的信息進行回答,信息的發(fā)布人員不會存儲信息,也不會再次發(fā)布。當QoS為1的時候,可以確保消息至少可以發(fā)送一次,利用簡單的ACK機制將消息系統(tǒng)保證QoS 1。此時,設(shè)備在傳輸各類信息的過程中,將會等待PUBACK報文的影帶,倘若設(shè)備在規(guī)定的時間范圍內(nèi)沒有接收到PUBACK報文的回答,此時設(shè)備將會將信息的DUP設(shè)置為1,并且將消息重新發(fā)送。當QoS為2的時候,消息的訂閱者和發(fā)布者可以利用兩次會話的機會保證消息完成一次傳輸,這種方法是MQTT協(xié)議里面消息質(zhì)量等級最高的[10]。
結(jié)語
物聯(lián)網(wǎng)發(fā)展是以物聯(lián)網(wǎng)網(wǎng)絡(luò)通信技術(shù)為基礎(chǔ)而實現(xiàn)的。隨著物聯(lián)網(wǎng)應(yīng)用和物聯(lián)網(wǎng)技術(shù)的發(fā)展,物與物之間的數(shù)據(jù)信息傳輸已經(jīng)難以滿足系統(tǒng)中網(wǎng)絡(luò)數(shù)據(jù)傳輸需求,越來越多的應(yīng)用系統(tǒng)需要實現(xiàn)文件數(shù)據(jù)傳輸。本文基于MQTT協(xié)議,分析該協(xié)議的特點和應(yīng)用原理,與文件傳輸需求相結(jié)合,思考基于MQTT協(xié)議的物聯(lián)網(wǎng)文件傳輸系統(tǒng)設(shè)計要點,為相關(guān)研究人員提供理論和實踐參考。
參考文獻:
[1]呂元,夏振華,肖一帆.基于MQTT的2物聯(lián)網(wǎng)終端的PLC遠程工業(yè)監(jiān)控[J].電腦知識與技術(shù):學術(shù)交流,2022,18 (10):113-115.
[2]郭翠娟,暴寧,榮鋒.基于MQTT的物聯(lián)網(wǎng)平臺研究與設(shè)計[J].計算機工程與設(shè)計, 2022,43(8):2378-2384.
[3]沈剛?cè)A.基于MQTT物聯(lián)網(wǎng)協(xié)議的室內(nèi)小區(qū)自動化監(jiān)測系統(tǒng)[J].通信電源技術(shù),2022, 39(3):5.
[4]陳文藝,梁寧寧,楊輝.基于MQTT的物聯(lián)網(wǎng)網(wǎng)關(guān)雙向通信系統(tǒng)設(shè)計[J].傳感器與微系統(tǒng), 2022,41(8):100-103.
[5]葉康林,鐘瑾瑞,焦冠文,等.基于MQTT協(xié)議的生產(chǎn)實時數(shù)據(jù)傳輸技術(shù)應(yīng)用研究[J].信息系統(tǒng)工程,2021,(11):65-68.
[6]林楷焱,鐘俊健,陶銘.基于物聯(lián)網(wǎng)技術(shù)的智能停車場系統(tǒng)設(shè)計與實現(xiàn)[J].物聯(lián)網(wǎng)技術(shù), 2022,12(6):93-95.
[7]施昕昕,顧宇揚.基于MQTT協(xié)議的工業(yè)物聯(lián)網(wǎng)數(shù)據(jù)采集和控制系統(tǒng)[J].南京工程學院學報:自然科學版,2022,20(2):31-37.
[8]張狀狀,蔣偉,胡靜,等.MQTT大塊數(shù)據(jù)安全傳輸方案的設(shè)計與實現(xiàn)[J].信息與電腦, 2022, 34(9):218-222.
[9]Clissa Luca,Lassnig Mario,Rinaldi Lorenzo.Analyzing WLCG File Transfer Errors Through Machine Learning[J].Computing and Software for Big Science,2022,6(1):19-20.
[10]曾灶榮,陳德基,肖楊.基于區(qū)塊鏈和MQTT的物聯(lián)網(wǎng)通信協(xié)議[J].電子技術(shù)(上海),2022,51(5):15-19.
作者簡介:張朝蘭,本科,副教授,研究方向:電子信息和電氣控制類教育教學與項目管理;姜孝均,本科,副教授,研究方向:電子信息和電氣控制類教育教學與項目管理;易大江,本科,高級工程師,研究方向:軟件物聯(lián)網(wǎng)通信項目開發(fā)及管理。
基金項目:物聯(lián)網(wǎng)電梯應(yīng)急救援系統(tǒng)應(yīng)用研究(編號:遵市科合HZ字〔2022〕38號);遵義市配電智能運維創(chuàng)新人才團隊(編號:遵市科人才〔2022〕4號)。