標籤:物聯網
傳統的web應用可能不需要可靠的Message Service,但當前以物聯網為代表的多樣終端非常需要一個訊息協議來提供服務。
建築模式來來往往,如果說有一個永恒不變的事情,那就是需要一個可靠的訊息傳輸。
訊息佇列也許在用戶端/服務端世界有過它的盛世高峰,它處理大型主機之間的資訊交流並與我們的財務網路連接,但是它從來沒有離開我們---儘管事實上直接存取api是大多數當前開發的主要特點。
直接存取api在大多數我們的web系統中工作良好,在有限的伺服器資源及進程通訊的後端。然而當我們轉移到微型服務架構以及雲---特別是我們面對物聯網的時候,那麼事情改變了。
突然,由於物聯網的因素,我們將處理由不同規則部署的數不清的組件系統,還要處理終端發來的成千,可能不是上萬條的業務訊息。在這種情況下,著名的mvc設計模式將不能使用,所以我們需要轉換到微服務-安全模式,回去電腦情境概念就像是參與者,使用參與者/訊息模式去處理我們的服務如何與任意數量的終端進行通訊。
發布訂閱的救援
這是訊息佇列工具要發揮的作用,使用發布/訂閱模式為將資料轉送到伺服器端提供可靠的方法。微服務參與者可訂閱到發行的串連並對接收到資訊觸發相應的動作。這種模式很適合將裝置和服務串連起來,當有新的裝置不斷增加時仍能確保服務穩定。
由IBM開發的MQTT(訊息佇列傳輸協議)是一個輕量級的發布/訂閱訊息協議,目前已經被OASIS標準化。最初它被設計為大規模的WebSphere MQ系統與SCADA裝置連結,後來MQTT演變成為通用的目的訊息佇列系統,它能允許一台伺服器管理成千上萬個終端,這是一個很簡單的訊息協議它並不限制於TCP/IP,能被很有限處理能力的裝置所使用。
發布/訂閱協議並不陌生。不過它也許在大多數開發人員工具箱的底層裡,它們是一個為服務架構建立訊息大巴簡單方法。MQTT是發布/訂閱模相關的簡單執行,通過訊息發布到主題,而主題將會被用戶端應用訂閱。主題是按等級劃分的,所以你可以訂閱一個資源中的不同等級的資訊元素。
等級劃分的主題
例如,貨車中的冷凍裝置中的一系列感應器可以這麼組成一個等級劃分的主題格式:冷凍裝置感應器/卡車/溫度/地區,這裡卡車和地區可用於標識過濾資訊:一個車輛或一個地區下的多個車輛資訊。
應用程式可訂閱MQTT伺服器上可用的主題,使用明確的訂閱擷取指定的訊息種子,或使用萬用字元擷取不同等級主題聚集的訊息。你可以使用萬用字元替換一個等級架構中的一層或所有其餘的元素。
在我們案例中,儀錶貨車+冷凍裝置感應器+溫度能讓我們看到所有地區裡所有卡車上的溫度,同時,冷凍裝置感應器/卡車1#將獲得名字為卡車1上的所有冷凍感應器上的資料。這個方法意味著你可能使用多個微服務處理不同的主題--一個每天處理特定感應器或資料的監控,另一個處理觀察錯誤情況等等。
MQTT提供保持最後一條訊息發送的選項,因此當前的用戶端串連到服務端時,就有可能在訂閱的同時下載初始訊息而不用等待從源發送新的訊息。源還有一個選項"Will"--一個預先儲存在伺服器上的訊息用於在中斷連線時遞送。用戶端在will模式下可以中斷連線,當然如果他們沒有清空sesssion標記,可以重新串連並查看存在的訂閱。聯合使用session flags和wills令你可以處理源於不穩定的網路及自動化服務規模的問題。
設定服務品質
MQTT中一個非常有用的特色就為你的訊息設定QoS規則的能力。這裡有三個Qos層級可以使用:
Level 0:是最佳勞動選項,即出錯後無條件重試。這種方法很適合用於持續的監測像趨勢事務而不是實際的訊息。作為控制系統的一部分,你可能使用level 0串連到流處理器或者一個機器學習系統來處理大量的訊息。
Level 1:是”至少一次(at least once)“選項,用於訊息可以保證被遞送,儘管多次遞送可能產生。如果你在處理訊息量較少,通過編程處理重複項,這將是你的最佳選項。非常快,且低影響,並能與各種不同應用程式模組工作。
只有一次:是最為計算強調的層次,但它保證每個訊息有且只有一次被接收到。
在內部,MQTT是一個非常簡單的協議,它為構建物聯網應用程式或超大規模雲中的處理能力提供思想。當新的裝置被添加到網路中,他們可以快速成為新的佈景主題資源,同時新的用戶端可以它們建立同時訂閱主題。URI 方案令串連伺服器接收訊息非常簡單。有大量的工具提供協助測試MQTT串連,包括案頭和行動裝置 App---即使是使用websockets的app應用。
使用MQTT為物聯網建立訊息驅動的服務非常簡單,有各種服務包括知名的Mosquitto以及用於Arduino的案例代碼及其它製造商。在用戶端,MQTT同時被知名的工具支援,包括 Node.js-基於Secene microservices framework及visual Node-Red programming environment,伴隨著成長的社區論壇幫你開始建立你的應用。
擔心MQTT協議如何在現實世界中執行?這裡有一個很好證明:它為互連網中最大也是最忙的應用提供支援,這就是:Facebook‘s Messenger
本文來自:http://www.totcms.com/html/201508-7/20150807133726.htm
如何應用MQTT協議到物聯網中(IOT)