訂閱標識符與訂閱選項 - MQTT 5.0 新特性

2021-03-02 EMQX
MQTT v5 帶來了很多新的特性,我們會儘量以通俗易懂的方式展示這些特性,並探討這些特性對開發者的影響。到目前為止,我們已經探討過這些 MQTT v5 新特性 (https://www.emqx.io/cn/mqtt/mqtt5) ,今天我們將繼續討論:訂閱標識符訂閱選項

客戶端可以在訂閱時指定一個訂閱標識符,服務端將在訂閱成功創建或修改時建立並存儲該訂閱與訂閱標識符的映射關係。當有匹配該訂閱的 PUBLISH 報文要轉發給此客戶端時,服務端會將與該訂閱關聯的訂閱標識符隨 PUBLISH 報文一併返回給客戶端。

因此,客戶端可以建立訂閱標識符與消息處理程序的映射,以在收到 PUBLISH 報文時直接通過訂閱標識符將消息定向至對應的消息處理程序,這會遠遠快於通過主題匹配來查找消息處理程序的速度。

由於 SUBSCRIBE 報文支持包含多個訂閱,因此可能出現多個訂閱關聯到同一個訂閱標識符的情況。即便是分開訂閱,也可能出現這種情況,但這是被允許的,只是用戶應當意識到這樣使用可能引起的後果。根據客戶端的實際訂閱情況,最終客戶端收到的 PUBLISH 報文中可能包含多個訂閱標識符,這些標識符可能完全不同,也可能有些是相同的,以下是幾種常見的情況:

客戶端訂閱主題 a 並指定訂閱標識符為 1,訂閱主題 b 並指定訂閱標識符為 2。由於使用了不同的訂閱標識符,主題為 a 和 b 的消息能夠被定向至不同的消息處理程序。

客戶端訂閱主題 a 並指定訂閱標識符為 1,訂閱主題 b 並指定訂閱標識符為 1。由於使用了相同的訂閱標識符,主題為 a 和 b 的消息都將被定向至同一個消息處理程序。

客戶端訂閱主題 a/+ 並指定訂閱標識符為 1,訂閱主題 a/b 並指定訂閱標識符為 1。主題為 a/b 的 PUBLISH 報文將會攜帶兩個相同的訂閱標識符,對應的消息處理程序將被觸發兩次。

客戶端訂閱主題 a/+ 並指定訂閱標識符為 1,訂閱主題 a/b 並指定訂閱標識符為 2。主題為 a/b 的 PUBLISH 報文將會攜帶兩個不同的訂閱標識符,一個消息將觸發兩個不同的消息處理程序。

這種 PUBLISH 報文中攜帶多個訂閱標識符的情況,在消息速率低的時候通常不成問題,但在消息速率高時可能會引發一些性能問題,因此我們建議您儘量確保這種情況的出現都是您有意為之。

在 MQTT v5 中,你可以使用更多的訂閱選項來改變服務端的行為。

  QoS

參見 MQTT 消息服務質量等級 (https://www.emqx.io/cn/blog/introduction-to-mqtt-qos)。

  No Local

在 MQTT v3.1.1 中,如果你訂閱了自己發布消息的主題,那麼你將收到自己發布的所有消息。

而在 MQTT v5 中,如果你在訂閱時將此選項設置為 1,那麼服務端將不會向你轉發你自己發布的消息。

  Retain As Publish

這一選項用來指定服務端向客戶端轉發消息時是否要保留其中的 RETAIN 標識,注意這一選項不會影響保留消息中的 RETAIN 標識。因此當 Retain As Publish 選項被設置為 0 時,客戶端直接依靠消息中的 RETAIN 標識來區分這是一個正常的轉發消息還是一個保留消息,而不是去判斷消息是否是自己訂閱後收到的第一個消息(轉發消息甚至可能會先於保留消息被發送,視不同 Broker 的具體實現而定)。

  Retain Handling

這一選項用來指定訂閱建立時服務端是否向客戶端發送保留消息:

Retain Handling 等於 0,只要客戶端訂閱成功,服務端就發送保留消息。

Retain Handling 等於 1,客戶端訂閱成功且該訂閱此前不存在,服務端才發送保留消息。畢竟有些時候客戶端重新發起訂閱可能只是為了改變一下 QoS,並不意味著它想再次接收保留消息。

Retain Handling 等於 2,即便客戶訂閱成功,服務端也不會發送保留消息。

相關焦點

  • 物聯網MQTT—取消訂閱
    現在我們通過網絡調試助手來向阿里雲服務端訂閱主題1.第一步向服務端發送connect報文確認是否連接成功,然後發送訂閱報文,服務端會返回一個90 03 00 0A 10確認訂閱成功。>服務端會返回一個B0 02 00 0A確認訂閱。
  • 記一次MQTT協議壓測
    這些信令是雙向的、也有可能是一對多.我們用的MQTT協議,MQTT提供商有很多,比如融雲、阿里雲等MQTT協議概念MQTT協議是基於發布/訂閱模式的物聯網通信協議,憑藉簡單易實現、支持 QoS、報文小等特點,佔據了物聯網協議的半壁江山MQTT協議廣泛應用於物聯網、移動網際網路、智能硬體、車聯網、電力、能源等領域名詞發布訂閱主題會話保持QoS:QoS
  • 迅為迅為iTOP-i.MX6ULL 開發板-Mqtt 移植教程
    步驟二 打開一個終端,訂閱主題,命令如下: mosquitto_sub -h localhost -t "mqtt88.5.5 所示:   的文件夾,命令如圖 88.5.7: cp mosquitto /home/topeet/mqtt-arm/
  • MQTT 教程詳解(入門篇)
    這種方案的一種改進是:客戶端定時的向伺服器發起請求,詢問伺服器當是否有新消息。不得不說這種方式在一定程度上解決了時效性的問題,但是需要消耗很多的資源,客戶端需要更多的電量和流量,伺服器在沒有消息推送的情況下也要不停的處理客戶端的詢問請求。這種方式更多的用在小規模的系統當中。
  • iPhone上沒有取消訂閱選項的解決辦法!
    如果在 iPhone 上訂閱了應用提供的服務或內容,在取消訂閱之前,大部分應用會自動續訂。
  • 【零基礎學物聯網】MQTT篇 1-6 ESP8266發布MQTT消息
    到目前為止,我們已經學習了發布和訂閱MQTT消息的基本知識,這節課我們來將目前所學的知識應用到實際操作中。
  • 谷歌為Android開發者提供新選項 免安裝即可出售訂閱服務
    為促動 Play 商店的訂閱服務購買,谷歌正計劃向一票優質開發者提供免安裝 Android 應用、即可出售訂閱服務的新選項。其實在上周宣布第三版支付庫(Billing Library v3)的時候,谷歌就已經暗示了這項功能。
  • 百度雲網盤怎麼快速訂閱好友?快速訂閱好友方法
    百度雲有非常多的功能,其中有一項訂閱功能十分受歡迎,訂閱功能可以訂閱您喜歡的用戶並且可以隨時查看已訂閱用戶所上傳的文件,說了怎麼多我們應該怎麼樣訂閱其他用戶,訂閱完該如何查看呢?百度雲網盤軟體版本:8.3.0Android軟體立即查看百度雲網盤訂閱用戶的方法: 1.首先我們打開瀏覽器,然後輸入百度網盤,在搜索出來的結果中,我們點擊後面寫有官網字樣的結果如圖
  • 微信訂閱號如何申請?微信訂閱號申請條件流程介紹
    微信訂閱號為媒體和個人提供一種新的信息傳播方式,它能幫助企業和用戶之間建立很好的溝通和管理模式,而訂閱號也是微信對於微信公眾號進行了一定的條件制約。那微信訂閱號如何申請呢?今天小編就針對大家的這個問題來詳細介紹下微信訂閱號申請條件,有需要申請的朋友們可以通過本文來了解下。
  • 鴻蒙MQTT協議開發入門
    三、主要特性MQTT協議工作在低帶寬、不可靠的網絡的遠程傳感器和控制設備通訊而設計的協議,它具有以下主要的幾項特性:(1)使用發布/訂閱消息模式,提供一對多的消息發布,解除應用程式耦合。5.1 MQTT固定頭固定頭存在於所有MQTT數據包中,其結構如下:5.1.1 MQTT數據包類型位置:Byte 1中bits 7-4。相於一個4位的無符號值,類型、取值及描述如下:5.1.2 標識位位置:Byte 1中bits 3-0。
  • 從盜版到付費訂閱
    其實沒必要扭捏,對於獨立軟體開發商或開發者來說,軟體售賣獲得一次性收入之後無法獲得持續獲利是付費軟體一直以來面臨的難題,尤其是相對專業領域的軟體。用戶體量本來就小,新用戶拓展困難,老用戶的商業價值一次就用完了,沒有源源不斷的收入,開發者很難有激情持續更新軟體打造精品。以前常見的解決方案是要求用戶付費購買大版本的更新。
  • 【教你如何取消蘋果訂閱服務】Apple|自動續費訂閱服務,你中招了嗎?
    我們平常會訂閱很多服務,但是也有用戶經常忘記自己為哪些訂閱服務掏過腰包,把訂閱的服務全部看一遍也是非常麻煩。尤其是由於疫情原因,很多用戶在家很無聊,就會大量的進行應用訂閱和免費試用。           首先前往App Store,點擊右上角的頭像點擊訂閱;您將看到所有活動訂閱和過期訂閱都與您的Apple ID綁定在一起;點擊其中一個按鈕可以取消、更改選項或查看更多信息。      也可以切換更新收據選項,提醒你每月/每年的訂閱是更新的,當你終止訂閱或免費試用時蘋果會讓你知道你還可以使用多久。
  • 如何用播客客戶端訂閱 YouTube
    誠然,播客軟體在內容分發上有著獨一無二的優勢——支持自動下載新節目、歷史進度保存、多設備同步、離線收聽,遠優於打開 YouTube 一直盯著畫面(不是會員還不支持後臺播放)。 今天介紹的開源免費軟體Podsync正正能解決這些需求。
  • 微信公眾號Rss訂閱源燒錄教程
    域名的作用在於反向代理連接,就是讓做出來的Rss訂閱源地址好看一些,有了域名,有了伺服器,也可以選擇搭建博客,畢竟不難。帳號,本文所用到的帳號有二十次冪平臺帳號,新榜平臺的帳號。主要是藉助他們收入的內容,製作成Rss訂閱源。
  • STM32+W5500+MQTT+Android實現遠程數據採集及控制
    LED燈;4,安卓手機端訂閱傳感器數據的消息,當接收到消息後將傳感器數據在界面顯示;5,安卓手機可發送點亮或者熄滅LED燈的指令到伺服器,然後伺服器會將該指令轉發給STM32主控,然後STM32主控解析該指令並執行指令。
  • 《人類一敗塗地》創意工坊關卡怎麼進入 訂閱創意工坊方法介紹
    :left;text-indent:5px;} .t2c_r_f{width:311px;height:27px;line-height:31px;overflow:hidden;} .t2c_r_f a{margin:0 5px;font-size: 12px;} .t2c_r_f a:link{color:#737e91;} .t2c_r_f a:visited{
  • MicroPython使用MQTT協議接入OneNET雲平臺
    【1】MQTT協議簡介:MQTT(Message Queuing Telemetry Transport,消息隊列遙測傳輸協議),是一種基於發布/訂閱(publish/subscribe)模式的「輕量級」通訊協議,該協議構建於TCP/IP協議上,由IBM在1999年發布。MQTT最大優點在於,可以以極少的代碼和有限的帶寬,為連接遠程設備提供實時可靠的消息服務。
  • 後RSS時代,推薦3款優秀而強大的RSS訂閱閱讀工具及部分訂閱源
    一、使用RSS訂閱的優點RSS就是一種簡單的信息發布和傳遞方式,使得一個網站可以方便地調用其他提供RSS訂閱服務的網站的內容,從而形成「新聞聚合」,讓網站發布的內容在更大的範圍內傳播。我們根據RSS服務的穩定性、訪問速度、是否免費、跨平臺、過濾、支持OPML導入\出、手機APP、收藏、加精等,1. iOS、Android移動端1.1 InoReaderInoReader幾乎繼續了Google Reader大部分特性,支持 HTTPS、行動裝置訪問、導入 Google
  • 外刊訂閱雜誌訂閱,外刊訂閱哪家好-雜誌貓
    從其產品線來說,比較齊全,只要正常發刊的國外期刊,都能訂閱到;對於常年需要訂閱外文報刊的朋友,相對以往的經歷來說,外文報刊網,雜誌貓確實也是一個不錯的選擇!雜誌貓官方雜誌貓,最重要的就是要安全有保障,畢竟像一些國際頂級期刊來說,價格不菲;從該雜誌貓的經營經營來看,雜誌貓是一家比較靠譜的外刊雜誌訂閱平臺,信用比較好,值得推薦。
  • 如何取消 Apple Music 訂閱及申請退款?
    Apple Music 新用戶會獲得三個月的免費體驗時間,但三個月之後,一些用戶會忘記了取消訂閱,導致自動扣費。如果您不經常使用 Apple Music,想要取消訂閱和申請退款,可按如下方法操作:取消 Apple Music 訂閱:打開 iPhone 「設置」-「Apple ID」-「訂閱」。