MQTT自学入门(第一天)

MQTT相关概念

1、主题
1.1三种消息发布服务质量(Qos)

   Qos=0"至多一次",消息发布完全依赖于底层TCP/IP网络。会发生消息丢失或重复。这一级别可用于如下情况, 环境传感器数据,丢失一次读记录无所谓,因为不久后就会有第二次数据发送。这一种方式主要普通APP的推送,倘若你的智能设备在消息推送时没联网,推送过去没有收到,联网后也收不到了。
   Qos=1,“至少一次”,确保消息送达,但消息重复可能会发生。
   Qos=2,“只有一次”,确保消息到达一次。在一些比较严格的计费系统中,可以使用这个级别。在计费系统中,消息重复或者丢失,会导致不正确的结果。这种最高级别消息发布服务还可以用于即时通讯类的APP的推推送,确保用户收到消息有且只有一次。

2.2遗嘱消息

   当客户端断开链接时,发送给相关订阅者的遗嘱消息,一下情况会发送WillMessage:
• 服务器端发生了I/O错误或者网络失败
• 客户端在定义心跳时期失联
• 客户端在发送下线包之前关闭网络连接
• 服务端在收到下线包之前关闭网络连接
遗嘱消息一般通过客户端CONNECT的时候指定。

2 主题(topic)与主题过滤器(topicfilter)
2.1 主题

   主题是一个UTF-8字符串,由一个或者多个主题级别组成,每个主题级别之间有正斜杠(主题级别分隔符)分隔,如下图所示:
在这里插入图片描述

2.1.1 主题分隔符

  主题层级分隔符使得主题名结构化。如果存在分隔符,它将主题分为多个层级。
斜杠(’/’ U+002F)用于分割主题的每个层级,为主题名提供一个分层结构。当客户端订阅指定的主题,过滤器包含两种通配符时,主题层级分隔符就很有用了。主题层级分隔符可以出现在主题过滤器或者主题名的任何位置。相邻的主题层级分隔符表示一个0长度的主题层级。

举例:

sensor/led
root/control/sensor
root/control/light
2.2 主题过滤器

  含有通配符的主题,目的是让客户端可以订阅更多的主题。

2.3 通配符

  当客户端订阅主题时,它可以使用消息发布到确切主题,或者可以使用通配符订阅更多主题。通配符只能在订阅主题时使用,并且在发布消息时不允许使用。

2.3.1 单级通配符+

  +是只能用于单个主题层级匹配的通配符。在主题过滤器的任一层级都可以使用单级通配符,包括第一个和最后一个层级,然而它必须占据过滤器的整个层级。可以在主题过滤器的多个层级中使用它,也可以和多层通配符一起使用。

举例:
①china/+ //只能匹配china/GuangZhou
②china/+/+/zhongshanlu //能匹配china/guangzhou/tianhe/zhongshanlu和/china/shenzhen/nanshan/zhongshanlu

2.3.2 多级通配符#

  #是用于匹配主题中任意层级的通配符。多层通配符表示它的父级和任意数量的子层级。不管哪种情况,多级通配符总为主题过滤器的最后一个字符,并且确保它前面是正斜杠。
在这里插入图片描述
  例如:如果客户端订阅主题/china/guangzhou/#,它就会收到下列主题名发布的消息:
①china/guangzhou
②china/guangzhou/huangpu
③china/guangzhou/tianhe/zhongshanlu
④china/guangzhou/tianhe/zhongshanlu/num123

  订阅主题实例:
①school/# //也匹配单独的“school”,因为#包含它的父级
②# // 是有效的,会收到所有应用发出的消息
③school/teacher/# //有效的
④school/teacher# //无效的
⑤school/teacher/#/level //无效的,因为#必须是最后一个字符

2.3.3 以$开始的主题

  通配符“$”表示匹配一个字符,只要不是放在主题的最开头。
  以" $"开始的每个主题都会被特殊对待,比如当订阅#时,这些以 $开头的主题并不包含在订阅的内容中。这些主题被保留为MQTT代理服务器的内部特性。因此,客户端是不能向这些主题发布消息的。目前,broker所发布的主题格式还没有明确的官方标准。一般做法是用 $SYS/ 打头,后面跟不同的格式。
 举例:
① $xx
②/ $xx
③ /xx $

2.4 总结

  1.所有主题名和主题过滤器必须包含至少一个字符
  2.主题名或主题过滤器以前置或者后置“/”区分
  3.只包含“/”的主题名或主题过滤器是合法的
  4.主题名和主题过滤器是 UFT-8编码字符串,他们不能超过65535字节
  5.主题名和主题过滤器是区分大小写的

注意:单层通配符和多层通配符只能用于订阅(subscribe)消息而不能用于发布
(publish)消息,层级分隔符两种情况下均可使用。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值