Mqtt主题那点事

   日期:2021-03-14     浏览:103    评论:0    
核心提示:2、主题(消息路由),子主题,分组订阅(共享订阅)(1) 常见的主题形式以及定义mqtt 常见的topic 形式举例chat/room/1sensor/10/temperaturesensor/+/temperature$SYS/broker/metrics/packets/received$SYS/broker/metrics/#$queue/t/1$share/abc/t/1定义形式: 可以理解问文件式的分层结构: chat/root/1,主题是以 ”/“ 分割的

文章目录

  • 主题(消息路由),子主题,分组订阅(共享订阅)
    • (1) 常见的主题形式以及定义
    • (2)子主题(解释下 ”+“ , ”#“ 通配符的使用)
    • (3) 分组订阅 (共享订阅)
      • 群组订阅
      • 不带群组订阅

主题(消息路由),子主题,分组订阅(共享订阅)

(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

定义形式: 可以理解问文件式的分层结构: chat/root/1,主题是以 ”/“ 分割的

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

通配符 ”+“ 的使用


'+': 表示通配一个层级,例如a/+,匹配a/x, a/y
    
'#': 表示通配多个层级,例如a/#,匹配a/x, a/b/c/d

‘+’ 表示 一个的占位 , client 订阅 a/+ 相当有订阅月 a/ … 等主题, 可以如:

sensor/+/temperature 形式来订阅 sensor/未知主题/temperature 下的消息

‘#’ 表示 多个占位 ,client 订阅 a/# 相当于a 文件夹的子文件夹,以及子文件夹的子文件夹都会被定于

通配符 ”#“ 的使用

(3) 分组订阅 (共享订阅)

定义:适用于消息让一个集群中只有一台机器消费的场景歌(基于mqtt 服务 EMQ 的,其他的中间件原理查不多)

示例 前缀 真实主题名
$queue/t/1 $queue/ t/1
$share/abc/t/1 $share/abc t/1

群组订阅

以 $share/ 为前缀的共享订阅是带群组的共享订阅

group-name 可以为任意字符串,属于同一个群组内部的订阅者将以负载均衡接收消息,但 EMQ X 会向不同群组广播消息。

例如,假设订阅者 s1,s2,s3 属于群组 g1,订阅者 s4,s5 属于群组 g2。那么当 EMQ X 向这个主题发布消息 msg1 的时候:

EMQ X 会向两个群组 g1 和 g2 同时发送 msg1

s1,s2,s3 中只有一个会收到 msg1

s4,s5 中只有一个会收到 msg1


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



不带群组订阅

以 $queue/ 为前缀的共享订阅是不带群组的共享订阅。它是 $share 订阅的一种特例,相当与所有订阅者都在一个订阅组里面

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


如图相当于消息只会被 一个机器节点 s1 | s2 | s3 消费而不会每个机器都给消息消费一次

EMQ 负载均衡配置与派发Ack 配置


# etc/emqx.conf

# 均衡策略
broker.shared_subscription_strategy = random

# 适用于 QoS1 QoS2 消息,启用时在其中一个组离线时,将派发给另一个组
broker.shared_dispatch_ack_enabled = false


更多EMQ 使用参照 EMQ官方文档

更多的mqtt 问题,欢迎查看专题下的其他文章查看 ,也欢迎留言,也可以加我微信 Yangting199306 备注 csdn 一起讨论技术,也可以一起写文章

一起学Java ,跟强哥得永生,点赞关注 !!!

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
更多>相关资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服