MQTT协议理解

2017-06-06  本文已影响445人  今後次

开始

MQTT协议的开发公司,诞生时间等信息,可以通过google先生去查,这里就省略了。只说以下几个信息。

优点

主题管理

sub只能接收订阅的主题。主题可以使用[/]来设定成阶层的构造。
比如sub端想接收某一个服务器(或者是数据中心)的温度湿度消息。

/datacenter/abc/tokyo/floor/01/temperature
/datacenter/abc/tokyo/floor/01/humidity
/datacenter/abc/osaka/floor/01/temperature
/datacenter/abc/osaka/floor/01/humidity
/datacenter/xyz/tokyo/floor/05/temperature
/datacenter/xyz/tokyo/floor/05/humidity
/datacenter/xyz/nagoya/floor/12/temperature
/datacenter/xyz/nagoya/floor/12/humidity

sub端可以使用一些符号,模糊订阅一批主题。

/datacenter/abc/tokyo/floor/01/temperature

ABC数据中心的tokyo的1层的温度

/datacenter/xyz/nagoya/#

使用[#]获取 xyz数据中心的nagoya的所有阶层的温度和湿度

/datacenter/+/tokyo/floor/+/humidity

使用[+]获取所有数据中心的tokyo的所有阶层的湿度

[#]和[+]可以组合使用。

** 有意思的是sub可以使用通配符订阅,pub端却不能使用,必须发布完整的主题名 **

QoS

pub 发布消息到达sub端,可以指定以下三种品质等级
QoS0 : 就发送一次,sub收到收不到都不再重新发。
**QoS1 **: 保证至少sub端收到一次。但是有可能多次接到。

QoS2 : 保证至少且只有一次sub端接到消息。

概念图

遗言机制

协议有专门设定遗言的标志: Will Flag。同时会影响另外两个位(Will Qos和Will Retain)是否有效。

Will Flag
就是pub客户端预先定义好,在自己跟MQTT服务器异常断开的情况下,所留下的最后遗愿(Last Will),也称之为遗嘱(Testament)。 这个遗嘱就是一个由客户端预先定义好的主题和对应消息,附加在CONNECT的可变头部中,在客户端连接出现异常的情况下,由服务器主动发布此消息。
只有在Will Flag位为1时,Will Qos和Will Retain才会被读取,此时消息体Playload中要出现Will Topic和Will Message具体内容,否则,Will QoS和Will Retain值会被忽略掉。

Will Qos
两位表示,和PUBLISH消息固定头部的QoS level含义一样。
若标识了Will Flag值为1,那么Will QoS就会生效,否则会被忽略掉。

Will RETAIN
如果设置Will Flag,Will Retain标志就是有效的,否则它将被忽略。
当客户端意外断开服务器发布其Will Message之后,服务器是否应该继续保存。这个属性和PUBLISH固定头部的RETAIN标志含义一样。

PUBLISH固定头部的RETAIN
定义MQTT服务器是否保留最后一次pub传递过来的消息。如果保留的话,当下一次消息发布前,如果有心的sub端加入,那么就把MQTT上保留的消息发送给新追加的sub端。
比如:一个小时或者一天才发布一次,新的消息接收端(sub端)却随时会追加的场景,就适合设定设定RETAIN。

上一篇下一篇

猜你喜欢

热点阅读