在機智云的整個架構里面,如上圖,GAgent實現了從模塊到云端的數據交互,其實GAgent里面就是用MQTT協議實現的,可見MQTT協議的重要性。今天詳細介紹MQTT的發送和接收消息。
在這一章中,我們將集中講解MQTT的發布、訂閱和取消訂閱的相關問題。本節講的是關于發布/訂閱基礎的,這篇文章將重點講解在MQTT協議中發布和訂閱的具體細節。如果您沒有閱讀第二章,關于發布/訂閱模式基本知識的,我們強烈建議您先閱讀。
上一節我們研究了建立MQTT客戶端和代理之間的連接,所以本周我們將討論發送和接收消息。 發布
MQTT客戶端連接到代理后,可以發布消息。代理發送的消息主題進行過濾。所以每個消息都必須包含一個主題,由代理將使用該主題將消息轉發給感興趣的客戶端。每個消息通常具有包含以字節格式傳輸的實際數據的有效載荷。MQTT與數據無關,完全取決于有效負載的結構使用情況。如果要發送二進制數據,文本數據,甚至是完整的XML或JSON,則完全由發送人來決定。MQTT發布消息還有一些很多的屬性,我們將在下面詳細討論:
9.jpg (16.76 KB, 下載次數: 116)
下載附件
2017-8-25 08:54 上傳
Topic Name(主題名稱) 一個簡單的字符串,其分層結構以正斜杠為分隔符。舉一個例子如:“myhome / livingroom / temperature”或“Germany / Munich / Octoberfest / people”。有關主題的更多詳細信息,請參考后面的文章。 一個消息的服務質量水平,級別有0、1、2,是確定到達另一端(客戶端或代理)的消息的保證。關于更多關于QoS的內容,我們將在后面做詳細的介紹。 該標志確定代理是否持久保存某個特定主題的消息。訂閱該主題的新客戶端將在訂閱后立即收到該主題的最后保留消息。在接下來的文章中將討論有關消息保持的更多內容以及最佳實踐。 這是消息的實際內容。MQTT完全與數據無關的,可以對數據進行任何編碼,加密數據和二進制的數據。 包標識符是客戶端和代理之間的唯一標識符,用于標識消息流中的消息。這僅適用于QoS1和QoS2。設置這個MQTT內部標識符是客戶端庫或代理的事情。 重復標志表示該消息是重復的,并且被重新發送,因為另一端沒有確認原始消息。這僅與QoS1和QoS2相關,更多細節在后面介紹,這與QoS級別有關。他的重新發送/重復機制通常由MQTT客戶端庫或代理程序作為實現細節處理。
7.jpg (17.03 KB, 下載次數: 105)
下載附件
2017-8-25 08:54 上傳
最初發布消息的客戶端只關心將發布的消息傳遞給代理。從那里,代理有責任將消息傳遞給相應的訂閱者。發布客戶端沒有得到任何反饋,如果有人對此發布的消息感興趣,也可以有多個客戶端接收到該代理的消息,接收到該消息的也可以是發布客戶端本身,因為發布和訂閱不是沖突的。 訂閱
如果沒有人收到消息,發布消息是沒有意義的,換句話說,如果沒有客戶端訂閱任何主題,客戶端需要向MQTT代理服務器發送訂閱消息,以便收到相關消息。訂閱消息很簡單,它只包含唯一的數據包標識符和訂閱列表。
8.jpg (11.99 KB, 下載次數: 86)
下載附件
2017-8-25 08:54 上傳
Packet Identifier(包標識符) 包標識符是客戶端和代理之間的唯一標識符,用于標識消息流中的消息。這僅適用于QoS1和QoS2。設置這個MQTT內部標識符是客戶端庫或代理的事情。 訂閱消息可以包含客戶端的任意數量的訂閱。每個訂閱由一對主題和QoS級別組成。訂閱消息中的主題還可以包含通配符,這使得可以訂閱某些主題模式。如果一個客戶端有重疊訂閱,該主題的最高QoS級別將獲勝,并由代理用于傳遞該消息。 每個訂閱將由代理通過以訂閱應答消息的形式向客戶端發送確認來確認信息 。此消息包含與原始訂閱消息相同的數據包標識符(以便標識消息)和返回碼列表。
6.jpg (20.31 KB, 下載次數: 115)
下載附件
2017-8-25 08:54 上傳
Packet Identifier(包標識符) 分組標識符是用于標識消息的唯一標識符。它與訂閱消息中相同。 代理為訂閱消息中接收到的每個主題/ QoS進行返回一個返回碼。因此,如果訂閱消息有5個訂閱,將有5個返回碼,以確認代理服務器授權的具有QoS級別的每個主題。如果訂閱被代理禁止(例如,如果客戶端不允許訂閱此主題,由于權限不足或該主題有問題),代理將向指定主題響應失敗返回代碼。 在客戶端成功發送訂閱消息并收到訂閱應答消息后,它將收到與訂閱主題相匹配的發布消息 取消訂閱
訂閱消息相對應的是取消訂閱消息,它刪除代理上的客戶端的現有訂閱。取消訂閱消息類似于訂閱消息,并且還具有包標識符和主題列表。Packet Identifier(包標識符) 分組標識符是用于標識消息的唯一標識符。它與訂閱消息中相同。 主題列表包含任意數量的主題,客戶端執行取消訂閱。只需要將主題作為字符串發送(不帶QoS),該主題將取消訂閱,而不管最初訂閱的QoS級別如何。 代理將確認取消訂閱消息的請求。該消息僅包含包標識符。Packet Identifier(包標識符) 分組標識符是用于標識消息的唯一標識符。它與訂閱消息中相同。從代理接收到取消訂閱消息后,就認為該取消訂閱消息中的訂閱消息已經被刪除。
這就是我們的MQTT 要點系列的第三部分的結尾。我們希望你喜歡在下一篇文章中,我們將深入了解MQTT主題的使用。我們將解釋通配符的基本知識以及使用情況以及更多實際的例子。 學習總結
|