mqtt概念整理

运行模式: 

服务器: emqx (https://docs.emqx.io/edge/v3/cn/install.html

协议头字节数: 2个字节

三种消息可能性保障(Qos)

  • Qos0:最多一次 、
  • Qos1:最少一次、
  • Qos2:只有一次。

Sbuscrib: 订阅消息

publish: 发布消息

MQTT是通过主题对消息进行分类的,可以通过反斜杠表示多个层级关系。主题并不需要创建,直接使用就是了。

主题还可以通过通配符进行过滤。其中,+可以过滤一个层级,而#只能出现在主题最后表示过滤任意级别的层级。

举个例子:

·       building-b/floor-5:代表B楼5层的设备。

·       +/floor-5:代表任何一个楼的5层的设备。

·       building-b/#:代表B楼所有的设备。

Broker(服务器) - 保留消息 功能

MQTT客户端向服务器发布(PUBLISH)消息时,可以设置保留消息(Retained Message)标志。保留消息(Retained Message)会驻留在消息服务器,后来的订阅者订阅主题时仍可以接收该消息。

Broker会存储每个Topic(主题)的最后一条保留消息及其Qos,当订阅该Topic的客户端上线后,Broker需要将该消息投递给它。 

保留消息的删除

  1. 方式1:发送空消息体的保留消息;
  2. 方式2:发送最新的保留消息覆盖之前的(推荐);

MQTT会话(Clean Session)

MQTT客户端向服务器发起CONNECT连接请求时,可以通过’Clean Session’标志设置会话。
‘Clean Session’设置为0,表示创建一个持久会话,在客户端断开连接时,会话仍然保持并保存离线消息,直到会话超时注销。
‘Clean Session’设置为1,表示创建一个新的临时会话,在客户端断开时,会话自动销毁。

当clean session的值为false,即保留会话,那么
该客户端上线,并订阅了主题"r",那么该主题会一直存在,即使客户端离线,该主题也仍然会记忆在EMQ服务器内存。
当客户端离线又上线时,仍然会接收到离线期间别人发来的publish消息(QoS=0,1,2)。类似即时通讯软件,终端可以接收离线消息。
除非客户端主动取消订阅主题,否则主题一直存在。另外,Mnesia本地不会持久化session,subscription和topic,服务器重启则丢失。

原文地址:https://www.cnblogs.com/shuiche/p/11737378.html