MQTT02 主題

@[toc]

主題(消息路由),子主題,分組訂閱(共享訂閱)

(1) 常見的主題形式以及定義

mqtt 常見的topic 形式舉例


chat/room/1

sensor/10/temperature

sensor/+/temperature

$SYS/broker/metrics/packets/received

$SYS/broker/metrics/#

$queue/t/1

$share/abc/t/1

定義形式: 可以理解問文件式的分層結(jié)構(gòu): chat/root/1,主題是以 ”/“ 分割的

(2)子主題(解釋下 ”+“ , ”#“ 通配符的使用)

通配符 ”+“ 的使用


'+': 表示通配一個(gè)層級(jí),例如a/+,匹配a/x, a/y
    
'#': 表示通配多個(gè)層級(jí),例如a/#,匹配a/x, a/b/c/d

'+' 表示 一個(gè)的占位 , client 訂閱 a/+ 相當(dāng)有訂閱月 a/ ... 等主題, 可以如:

sensor/+/temperature 形式來訂閱 sensor/未知主題/temperature 下的消息

通配符 ”#“ 的使用

'#' 表示 多個(gè)占位 ,client 訂閱 a/# 相當(dāng)于a 文件夾的子文件夾,以及子文件夾的子文件夾都會(huì)被訂閱

(3) 分組訂閱 (共享訂閱)

定義:適用于消息讓一個(gè)集群中只有一臺(tái)機(jī)器消費(fèi)的場(chǎng)景歌(基于mqtt 服務(wù) EMQ 的,其他的中間件原理查不多)

示例 前綴 真實(shí)主題名
$queue/t/1 $queue/ t/1
$share/abc/t/1 $share/abc t/1

群組訂閱

以 $share/<group-name> 為前綴的共享訂閱是帶群組的共享訂閱

group-name 可以為任意字符串,屬于同一個(gè)群組內(nèi)部的訂閱者將以負(fù)載均衡接收消息,但 EMQ X 會(huì)向不同群組廣播消息。

例如,假設(shè)訂閱者 s1,s2,s3 屬于群組 g1,訂閱者 s4,s5 屬于群組 g2。那么當(dāng) EMQ X 向這個(gè)主題發(fā)布消息 msg1 的時(shí)候:

EMQ X 會(huì)向兩個(gè)群組 g1 和 g2 同時(shí)發(fā)送 msg1

s1,s2,s3 中只有一個(gè)會(huì)收到 msg1

s4,s5 中只有一個(gè)會(huì)收到 msg1


                                       [s1]
           msg1                      /
[emqx]  ------>  "$share/g1/topic"    - [s2] got msg1
         |                           \
         |                             [s3]
         | msg1
          ---->  "$share/g2/topic"   --  [s4]
                                     \
                                      [s5] got msg1



不帶群組訂閱

queue/ 為前綴的共享訂閱是不帶群組的共享訂閱。它是share 訂閱的一種特例,相當(dāng)與所有訂閱者都在一個(gè)訂閱組里面

                                       [s1] got msg1
        msg1,msg2,msg3               /
[emqx]  --------------->  "$queue/topic" - [s2] got msg2
                                     \
                                       [s3] got msg3


如圖相當(dāng)于消息只會(huì)被 一個(gè)機(jī)器節(jié)點(diǎn) s1 | s2 | s3 消費(fèi)而不會(huì)每個(gè)機(jī)器都給消息消費(fèi)一次

EMQ 負(fù)載均衡配置與派發(fā)Ack 配置


# etc/emqx.conf

# 均衡策略
broker.shared_subscription_strategy = random

# 適用于 QoS1 QoS2 消息,啟用時(shí)在其中一個(gè)組離線時(shí),將派發(fā)給另一個(gè)組
broker.shared_dispatch_ack_enabled = false


更多EMQ 使用參照 EMQ官方文檔

更多的mqtt 問題,歡迎查看專題下的其他文章查看 ,也歡迎留言,也可以加我微信 Yangting199306 備注 簡(jiǎn)書 一起討論技術(shù),也可以一起寫文章

一起學(xué)Java ,跟強(qiáng)哥得永生,點(diǎn)贊關(guān)注 !!!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 今天感恩節(jié)哎,感謝一直在我身邊的親朋好友。感恩相遇!感恩不離不棄。 中午開了第一次的黨會(huì),身份的轉(zhuǎn)變要...
    迷月閃星情閱讀 10,607評(píng)論 0 11
  • 彩排完,天已黑
    劉凱書法閱讀 4,273評(píng)論 1 3
  • 沒事就多看看書,因?yàn)楦褂性姇鴼庾匀A,讀書萬卷始通神。沒事就多出去旅游,別因?yàn)闆]錢而找借口,因?yàn)橹灰闶〕詢€用,來...
    向陽之心閱讀 4,812評(píng)論 3 11
  • 表情是什么,我認(rèn)為表情就是表現(xiàn)出來的情緒。表情可以傳達(dá)很多信息。高興了當(dāng)然就笑了,難過就哭了。兩者是相互影響密不可...
    Persistenc_6aea閱讀 125,924評(píng)論 2 7