MQTT Part 8 保留消息

本文翻譯自http://www.hivemq.com/blog/mqtt-essentials-part-8-retained-messages

未經(jīng)允許,不得轉(zhuǎn)載

當(dāng)發(fā)布MQTT消息時淹禾,發(fā)布者不能確保消息被訂閱者收到馁菜。它只能確認(rèn)消息被安全地投遞到broker。同樣的訂閱者也如此铃岔,如果訂閱者連上broker并且訂閱了它感興趣的主題汪疮,我們沒有辦法保證訂閱者何時才能收到第一條消息,因為這完全取決于該主題的發(fā)布者毁习。等待發(fā)布者發(fā)布消息可能需要幾秒鐘智嚷,幾分鐘甚至幾個小時。而這期間纺且,訂閱者對于當(dāng)前的狀態(tài)一無所知纤勒。而此時就是保留消息發(fā)揮作用的時候了。

保留消息

保留消息是一條將保留標(biāo)志(retained flag)置為true的普通MQTT消息隆檀。broker會針對主題依照QoS級別保留最后一條保留消息摇天,當(dāng)訂閱者訂閱主題時會立即收到保留消息。broker僅為每個主題保留一條保留消息恐仑。
訂閱者不需要明確指定主題泉坐,即便以通配符訂閱主題也會收到保留消息。例如客戶端A向myhome/livingroom/temperature主題發(fā)布了保留消息裳仆,稍后客戶端B訂閱了myhome/#主題腕让,那么客戶端B會在訂閱后直接收到此條保留消息。訂閱者也可以識別出收到的消息是否為保留消息,因為broker在發(fā)送保留消息時保留標(biāo)志(retained flag)仍為true纯丸∑危客戶端可以決定如何處理此條消息。
所以保留消息可以幫助新的訂閱者在訂閱主題后立即獲取當(dāng)前狀態(tài)觉鼻,而無須等待發(fā)布者發(fā)送下一條更新俊扭。
換句話說,一個主題的保留消息是最新的可知的有效數(shù)據(jù)坠陈,它不必是最新的數(shù)據(jù)萨惑,但它確實是將保留標(biāo)志置為true的最新消息。
還有一點很重要仇矾,我們要理解保留消息和我們上節(jié)提到的持久會話無關(guān)庸蔼,一旦保留消息被存儲,將其移除的唯一方式就是下面所提到的辦法贮匕。

發(fā)送一條保留消息

從開發(fā)者的角度來說姐仅,發(fā)送一條保留消息是最簡單直接的辦法。你只需要將一條MQTT發(fā)布消息的保留標(biāo)志(retained flag)置為true刻盐。每一個典型的客戶端庫文件都提供了一個簡單方法來實現(xiàn)此操作萍嬉。

刪除一條保留消息

還有一種很簡單的方法來刪除某個主題的保留消息:只需要發(fā)送一個零字節(jié)的保留消息到你想清空消息的主題。broker將會刪除保留消息隙疚,并且訂閱者也不會再收到保留消息壤追,因為每個新的保留消息都會覆蓋上一個。

什么情況下應(yīng)該使用保留消息供屉?

保留消息存在的意義是為了訂閱者能夠立即收到消息而無須等待發(fā)布者發(fā)布下一條消息行冰。這在那些指示設(shè)備或者組件狀態(tài)的主題上非常有用。例如伶丐,設(shè)備1的狀態(tài)對應(yīng)主題myhome/devices/device1/status悼做,當(dāng)使用保留消息時,此主題的一個新訂閱者在訂閱后會立即收到設(shè)備的當(dāng)前狀態(tài)哗魂。對于那些周期性地發(fā)送數(shù)據(jù)肛走,如溫度,GPS坐標(biāo)或其他數(shù)據(jù)的客戶端也一樣录别。如果不使用保留信息朽色,訂閱者在發(fā)布者發(fā)送間隔期將對當(dāng)前狀態(tài)一無所知。而使用保留信息可以立即提供一個有效數(shù)據(jù)給新客戶端组题。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末葫男,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子崔列,更是在濱河造成了極大的恐慌梢褐,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異盈咳,居然都是意外死亡耿眉,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進店門鱼响,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鸣剪,“玉大人,你說我怎么就攤上這事热押∥骺” “怎么了斤寇?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵桶癣,是天一觀的道長。 經(jīng)常有香客問我娘锁,道長牙寞,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任莫秆,我火速辦了婚禮间雀,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘镊屎。我一直安慰自己惹挟,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布缝驳。 她就那樣靜靜地躺著连锯,像睡著了一般。 火紅的嫁衣襯著肌膚如雪用狱。 梳的紋絲不亂的頭發(fā)上运怖,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天,我揣著相機與錄音夏伊,去河邊找鬼摇展。 笑死,一個胖子當(dāng)著我的面吹牛溺忧,可吹牛的內(nèi)容都是我干的咏连。 我是一名探鬼主播,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼鲁森,長吁一口氣:“原來是場噩夢啊……” “哼捻勉!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起刀森,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤踱启,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體埠偿,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡透罢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了冠蒋。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片羽圃。...
    茶點故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖抖剿,靈堂內(nèi)的尸體忽然破棺而出朽寞,到底是詐尸還是另有隱情,我是刑警寧澤斩郎,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布脑融,位于F島的核電站,受9級特大地震影響缩宜,放射性物質(zhì)發(fā)生泄漏肘迎。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一锻煌、第九天 我趴在偏房一處隱蔽的房頂上張望妓布。 院中可真熱鬧,春花似錦宋梧、人聲如沸匣沼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽释涛。三九已至,卻和暖如春跺讯,著一層夾襖步出監(jiān)牢的瞬間枢贿,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工刀脏, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留局荚,地道東北人。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓愈污,卻偏偏與公主長得像耀态,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子暂雹,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,500評論 2 359

推薦閱讀更多精彩內(nèi)容