什么是 MQTT 主题? MQTT 主题本质上是一个 UTF-8 编码的字符串,是 MQTT 协议进行消息路由的基础。MQTT 主题类似 URL 路径,使用斜杠 / 进行分层: chat/room/1 sensor/10/temperature sensor/+/temperature sensor/# 为了避免歧义且易于理解,通常不建议主题以 / 开头或结尾,例如 /chat 或 chat/。 不同于消息队列中的主题(比如 Kafka 和 Pulsar),MQTT 主题不需要提前创建。MQTT 客户端在订阅或发布时即创建了主题,并且也不需要手动删除主题。 下图是一个简单的 MQTT 订阅与发布流程, APP 1 订阅了sensor/2/temperature 主题后,将能接收到 Sensor 2 发布到该主题的消息。 MQTT 主题通配符 MQTT 主题通配符包含单层通配符 + 及多层通配符 #,主要用于客户端一次订阅多个主题。 注意 :通配符只能用于订阅,不能用于发布。 单层通配符 加号 (“+” U+002B) 是用于单个主题层级匹配的通配符。在使用单层通配符时,单层通配.... 通过案例理解 MQTT 主题与通配符 mqtt
前言 之前看了一些关于Mqtt协议的文章,看完了没有去做笔记,过了这么久忘了很多。最近刚好在做相关的东西,需要用到,就顺便记下来了。 正文 cleansession 清除会话 在客户端连接服务端时设置。 值为:true/false 作用:服务器必须在客户端断开之后继续存储/保持客户端的订阅状态,包括以下状态 存储订阅的消息Qos1和Qos2消息,当客户端重新订阅时发送 服务端正在发送消息给客户端期间连接丢失导致发送失败的消息 retain 持久消息。 想一下以下场景,你有个温湿度传感器,每隔几个钟向主题发送一次消息,此时你有个新的客户端订阅了这个主题,那它难道要等上几个钟才能获得消息吗?可不可以一订阅就获取上一次发送的消息呢? 答案是可以的 值为: true/false 作用:表示发送的消息需要一直持久保存(不受服务器重启影响),不但要发送给当前的订阅者,并且以后新来的订阅了此Topic name的订阅者会马上得到推送。 注意:新来的订阅了此topic name的订阅者指的是新的clientID用户,也就是说假如你是叫12345的用户在同一次的连接中多次重复订阅的话是和订阅一次一样的;.... Mqtt协议——cleansession、retain、will、Shared Subscription mqtt
遗嘱消息是 MQTT 为那些可能出现 意外断线 的设备提供的将 遗嘱 优雅地发送给第三方的能力。意外断线包括但不限于: 因网络故障或网络波动,设备在保持连接周期内未能通讯,连接被服务端关闭 设备意外掉电 设备尝试进行不被允许的操作而被服务端关闭连接,例如订阅自身权限以外的主题等 遗嘱消息可以看作是一个简化版的 PUBLISH 消息,他也包含 Topic, Payload, QoS 等字段。遗嘱消息会在设备与服务端连接时,通过 CONNECT 报文指定,然后在设备意外断线时由服务端将该遗嘱消息发布到连接时指定的遗嘱主题(Will Topic)上。这也意味着服务端必须在回复 CONNACK 之前完成遗嘱消息的存储,以确保之后任一时刻发生意外断线的情况,服务端都能保证遗嘱消息被发布。 以下为遗嘱消息在 MQTT 5.0 和 MQTT 3.1 & 3.1.1 的差异: MQTT 5.0 MQTT 3.1 & 3.1.1 Will Retain Yes Yes Will QoS Yes Yes Will Flag Yes Yes Will Properties Yes No Wi.... MQTT 遗嘱消息(Will Message)的使用 emqx