【转】MQTT Version 5.0
MQTT标准说明文档
MQTT 5.0 vs MQTT 3.1.1
MQTT 5.0 新增特性:
1、会话过期间隔(session expiry interval)
它被用来指定会话在网络断开后能够在服务端保留的最长时间,如果到达过期时间但网络连接仍未恢复,服务端就会丢弃对应的会话状态。
MQTT 5.0的clean start标志位和MQTT 3.1.1的cleansession标志位功能是一样的。如果希望需要设置会话有效期,则可以通过session expiry interval进行控制。
2、消息过期间隔(message expiry interval)
它允许发布端为有时效性的消息设置一个过期间隔,如果该消息在服务端中停留超过了这个指定的间隔,那么服务端将不会再将它分发给订阅端。默认情况下,消息中不会包含消息过期间隔,这表示该消息永远不会过期。
3、原因码(reason code)
MQTT 3.1.1 仅CONNACK 报文和SUBACK 报文有原因码,其他报文就没有了。MQTT 5.0 中支持 Reason Code 的报文也扩展到了:CONNACK、PUBACK、PUBREC、PUBREL、PUBCOMP、SUBACK、UNSUBACK、DISCONNECT 以及 AUTH。现在,我们不仅可以知道消息发布是否成功,还可以知道失败的原因,例如当前不存在匹配的订阅者、或者无权向这个主题发布消息等等。
由于reason code只是一个数字,需要知道详情的话,要通过查表才能得知。但MQTT 5.0提供了reason string,可以直接返回详细的原因。
4、主题别名(topic alias)
它允许用户将主题长度较长且常用的主题名缩减为一个2字节整数来降低发布消息时的带宽消耗。
第一个发布消息时,把某个主题和主题别名一起发送过去,后续接着发布消息,通过主题别名就可以了。压缩了主题长度,减少了开销。
5、用户属性(user property)
用户属性(User Properties)其实是一种自定义属性,允许用户向 MQTT 消息添加自己的元数据,传输额外的自定义信息以扩充更多应用场景。该功能与 HTTP 的 Header 的概念非常类似
6、共享订阅(shared subscription)
MQTT 5.0 引入了共享订阅特性,它使得 MQTT 服务端可以在使用特定订阅的客户端之间均衡地分配消息负载。这表示,当我们有两个客户端共享一个订阅时,那么每个匹配该订阅的消息都只会有一个副本投递给其中一个客户端。
共享订阅主题命名规范:$share/{Share Name}/{Topic Filter}
-
$share: 固定前缀,标识共享订阅主题
-
{Share Name}:用group id可能更合适
-
{Topic Filter}:实际订阅的主题