數(shù)據(jù)流如何在MQ遙測傳輸 (MQTT) 中工作
在Internet和計算機上發(fā)現(xiàn)的由人類創(chuàng)建的數(shù)據(jù)并不總是準確的。人工打字、掃描、拍照或錄音并不總是可靠的。但是,如果機器上有傳感器可以收集數(shù)據(jù)并能夠與其他機器通信呢?如果有某種協(xié)議可以讓醫(yī)療和個人小工具、電器和其他電子設備相互發(fā)送和接收數(shù)據(jù)怎么辦?
例如,這樣的系統(tǒng)意味著人們可以準確地跟蹤他們庫存中的物品?;蛘咚麄兊昀锏哪男┝慵蛭锲沸枰鼡Q、補充或修理。由于設備中的傳感器收集數(shù)據(jù),這意味著數(shù)據(jù)更準確、更可靠。
隨著第四次工業(yè)革命的到來,這個系統(tǒng)成為可能。它帶來了物聯(lián)網(IoT)、機器人技術、人工智能和其他新興的顛覆性技術。
MQTT概述
可以相互發(fā)送和接收消息的智能電視、智能手表和其他“智能”設備和小工具現(xiàn)在與網站上的cookie一樣普遍。這些可以通過傳感器收集數(shù)據(jù)并將其發(fā)送到其他設備的智能設備統(tǒng)稱為物聯(lián)網(IoT)。
設備如何做到這一點?它們相互通信的能力是通過一種稱為消息隊列遙測傳輸(MQTT)的消息傳遞技術實現(xiàn)的。它是一個基于IP的輕量級消息傳遞系統(tǒng),為物聯(lián)網提供支持。它使控制器、傳感器和其他小工具或設備能夠相互“對話”。此外,它支持并不總是在線的設備,例如配備微控制器的自動化設備。
MQTT消息傳遞協(xié)議由IBM的Andy Clark和Eurotech的Arlen Nipper于1999年創(chuàng)建。它最初是主要用于石油和天然氣行業(yè)的專有協(xié)議,后來成為開源協(xié)議。MQTT設計用于在低帶寬網絡中工作。此特性非常適合數(shù)字足跡較小的機器對機器通信和物聯(lián)網設備。它不僅適用于低帶寬網絡,也適用于高延遲環(huán)境。
MQTT用于各種行業(yè),如制造、健康、電信、汽車等。它現(xiàn)在被公認為物聯(lián)網消息傳遞的標準。該消息系統(tǒng)采用發(fā)布者/訂閱者原則,使用MQTT服務器進行操作。發(fā)送者和接收者都不需要直接相互連接。
來自源的數(shù)據(jù)由訂閱接收此類數(shù)據(jù)的客戶發(fā)布和接收。發(fā)布者和訂閱者的關系是這樣的:
- 發(fā)布者(數(shù)據(jù)源)在主題上傳輸數(shù)據(jù)或消息。
- 客戶端訂閱一個主題來接收消息。
- 服務器將發(fā)布者與訂閱者進行匹配。
- 如果未找到匹配項,則丟棄該消息。
這種安排類似于廣播或電視廣播——您只能從您調到的頻道查看傳輸。在MQTT中,數(shù)據(jù)源“發(fā)布”數(shù)據(jù),接收者獲取數(shù)據(jù),因為他們是注冊訂閱者。
MQTT架構及數(shù)據(jù)傳輸協(xié)議
MQTT旨在成為輕量級設備的簡單發(fā)布/訂閱協(xié)議,由兩個主要組件組成:代理/服務器和客戶端。
1.MQTT代理/服務器
運行從數(shù)據(jù)源或發(fā)布者接收消息的軟件的計算機稱為代理或服務器。然后,服務器/代理將數(shù)據(jù)從源發(fā)送到其正確的目的地,即訂閱者。該軟件可以使用專有或開源軟件、現(xiàn)場桌面PC或Raspberry Pi安裝在基于云的代理/服務器上。但是,如果您正在處理可以通過Internet控制的IoT項目,則使用基于云的服務器更合適。
服務器可以管理多達數(shù)千個同時連接的MQTT客戶端,具體取決于實現(xiàn)。因此,在選擇MQTT服務器時,可擴展性和集成性是必不可少的考慮因素。除了接收和發(fā)送消息之外,服務器還具有其他能力,例如:
- 安全
需要保護MQTT。它應該要求其客戶提供強大的用戶名和密碼。此外,傳輸控制協(xié)議連接應使用安全套接字層(SSL)和傳輸層安全性(TLS)進行加密。這些安全措施應確保消息在傳輸過程中的安全性和隱私性。
- 服務質量(QoS)級別
服務質量(QoS)級別是消息源和預期接收者之間的協(xié)議。該協(xié)議定義了特定消息的傳遞保證。MQ遙測傳輸中有三個級別的QoS:
- 最多一次(0)
在此級別,無法保證交付。這個級別最多保證的是“盡力而為”的交付。該消息既不存儲也不重新發(fā)送,并且收件人不發(fā)送接收確認。當Internet可靠且需要快速傳送數(shù)據(jù)時,使用此服務質量級別。
- 至少一次(1)
保證消息至少傳遞給訂閱者一次。發(fā)布者存儲消息,直到接收者發(fā)送接收確認。服務器還確認發(fā)布者發(fā)送的消息,讓客戶端知道消息已收到。如果客戶端沒有收到確認,該消息將再次發(fā)送。
確認告訴訂閱者客戶端所有與客戶端訂閱的主題有關的消息都已發(fā)布。雖然在此級別可以保證接收到的消息,但如果未按時收到接收確認,則可能會發(fā)生重復消息。
如果客戶端需要接收訂閱主題的所有消息,則使用級別2。但是,許多商業(yè)服務器不支持2級,因為它相對較慢且占用資源。
- 正好一次(2)
級別2是MQ遙測傳輸中的最高服務質量級別。每條消息都保證被訂閱者接收一次。它也是三個QoS級別中最安全但最慢的一個。雖然級別1可能導致消息重復,但級別2保證只接收一次數(shù)據(jù)。
此保證由發(fā)布者和訂閱者之間的兩個(至少)“請求和響應”流提供,這表明消息已被接收。一旦訂閱者確認收到消息,發(fā)布者就可以丟棄數(shù)據(jù)包。如果發(fā)布者沒有收到來自訂閱者的“收到消息”信號,則消息將繼續(xù)發(fā)送,直到消息被確認。
高QoS級別更可靠,但涉及高帶寬要求和更高延遲,這會減慢數(shù)據(jù)傳輸速度。當不需要快速消息傳遞并且重復消息可能導致問題時,使用此級別。
就QoS而言,消息傳遞有兩個方面:從發(fā)布者到服務器以及從服務器到訂閱者。每次將數(shù)據(jù)發(fā)送到服務器時,數(shù)據(jù)或消息的來源/發(fā)布者都會設置數(shù)據(jù)的QoS級別。然后,服務器根據(jù)客戶端的QoS級別(在訂閱過程開始時設置)將數(shù)據(jù)發(fā)送到訂閱者客戶端。如果客戶端的QoS設置低于發(fā)布客戶端,則服務器將發(fā)送QoS較低的數(shù)據(jù)。
此特性允許MQTT提供附加的消息傳遞服務質量,確保根據(jù)客戶端的要求發(fā)送數(shù)據(jù)。
- 存儲和轉發(fā)
即使訂閱者客戶端無法接收消息,某些MQTT消息也可以存儲并轉發(fā)給訂閱者。這些消息稱為客戶端可以訂閱的“存儲和轉發(fā)主題”。當訂閱者可以接收消息時,訂閱了存儲和轉發(fā)功能的客戶端可以接收存儲的數(shù)據(jù)。
要使此功能有效運行,MQTT服務器需要執(zhí)行以下操作:
- 跟蹤每個訂閱者的客戶ID
- 跟蹤成功發(fā)送到每個客戶端的最后一條消息的標識符。
MQTT代理會自動刪除過期消息,除非配置為保留它們。代理存儲配置的主題,以防將來的客戶訂閱它們。然后,這些消息將按照最初接收消息的順序傳遞給訂閱者。
2.MQTT客戶端
MQTT客戶端可以是發(fā)布者和訂閱者。標簽“發(fā)布者”和“訂閱者”指的是發(fā)布消息或訂閱接收消息的客戶端。在MQTT中,發(fā)布/訂閱功能可以在同一個客戶端中實現(xiàn)。客戶端可以在通信階段執(zhí)行不同的功能,如訂閱、取消訂閱、發(fā)布、連接和斷開連接。
此外,這些客戶端可以是任何設備或應用程序,從微型計算機到配備各種花里胡哨的完全承諾的基于云的代理/服務器??蛻舳丝梢允蔷哂凶钚旌陀邢拶Y源的緊湊型設備,并使用無線網絡連接。
可以這么說,任何能夠通過TCP/IP堆棧運行MQTT的設備都可以成為客戶端。MQTT的實現(xiàn)是流線型和直接的,這些特性使MQTT非常適合使用最少資源的小型設備。
結論
消息隊列遙測傳輸(MQTT)是一種使智能家電、智能小工具和其他物聯(lián)網(IoT)設備“對話”并與其他機器或系統(tǒng)共享信息的技術。這種消息傳遞技術使您的智能手機、冰箱、可穿戴設備、恒溫器、遠程傳感器和其他智能小工具相互交換數(shù)據(jù)。
MQTT中的數(shù)據(jù)流在服務器/代理的幫助下通過簡單的發(fā)布者/訂閱者系統(tǒng)工作。發(fā)布者通過服務器傳輸有關主題的數(shù)據(jù);然后服務器將數(shù)據(jù)傳輸?shù)接嗛喸撝黝}的客戶端。