天天看點

2.2 保留消息

“保留消息”是十分重要的MQTT概念。通過“保留消息”這一名稱不難判斷,“保留消息”是一種被保留下來的消息。但是這個“保留消息”為何要被保留?而保留消息又是有什麼特殊的用途?這些答案我們将在本節課揭曉。

保留消息的作用

要講明“保留消息”這一概念,我們先看一個場景。假設我們正在利用MQTT協定開發一套智能家居物聯網系統。在該系統中有一台專門用于檢測和釋出室溫資訊的MQTT用戶端,它每到整點時就會測量目前室溫并且向MQTT服務端釋出室溫測量結果。

假設在該智能家具物聯網系統中,還有一台環境資訊顯示用戶端。這台用戶端的作用就是把目前的室溫顯示在螢幕上以便我們實時了解室内溫度。換句話說,這台環境資訊顯示用戶端一啟動就會訂閱室溫主題,這樣室溫檢測用戶端一釋出消息,顯示用戶端就能擷取到最新的溫度消息并顯示在螢幕上了。

假設某天上午7:00,我們的室溫檢測用戶端将最新的室溫消息釋出到了服務端,那麼訂閱了室溫消息的顯示用戶端也就馬上擷取到室溫消息并且顯示在螢幕上。

然而在7:10的時候,家裡的小狗不小心把顯示用戶端的電源碰掉了,顯示用戶端沒有電也就自動關機了。我們發現這一問題後,馬上把顯示用戶端重新通電,用戶端通電啟動後會立刻訂閱室溫主題。

但這時候問題出現了,室溫測量用戶端每到整點才釋出一次溫度資訊。上一次釋出時間是7:00,下一次釋出時間是8:00。是以,盡管顯示用戶端訂閱了室溫主題,它還要等到8:00鐘才能收到最新室溫消息。在8:00前的幾十分鐘裡,顯示用戶端無法獲知目前室溫資訊,也就無法将室溫資訊顯示在螢幕上供我們查閱。

為了避免以上情況出現,我們可以讓室溫測量用戶端在每次向室溫主題釋出消息時都使用“保留消息”這一模式将溫度資訊釋出到服務端。這樣無論顯示用戶端在任何時間訂閱室溫主題,都會馬上收到該主題中的“保留消息”,也就是溫度測量用戶端釋出的最新室溫消息。

釋出保留消息的方法

2.2 保留消息

MQTT裝置釋出的保留消息的流程與釋出普通消息的流程十分類似。唯一差別是,在釋出保留消息時,MQTT裝置需要将PUBLISH封包中retainFlag設定為true(如上圖所示)。

當然,如果要釋出非保留消息,那麼PUBLISH封包中retainFlag設定為false。

修改保留消息的方法

删除保留消息的方法

繼續閱讀