简介

MQTT 全称为 Message Queuing Telemetry Transport(消息队列遥测传输)是一种基于发布/订阅范式的“轻量级”消息协议,由 IBM 发布。

  • MQTT 可以被解释为一种低开销,低带宽占用的即时通讯协议,可以用极少的代码和带宽的为连接远程设备提供实时可靠的消息服务,它适用于硬件性能低下的远程设备以及网络状况糟糕的环境下,因此 MQTT 协议在 IoT(Internet of things,物联网),小型设备应用,移动应用等方面有较广泛的应用。
  • IoT 设备要运作,就必须连接到互联网,设备才能相互协作,以及与后端服务协同工作。而互联网的基础网络协议是 TCP/IP,MQTT 协议是基于 TCP/IP 协议栈而构建的,因此它已经慢慢的已经成为了 IoT 通讯的标准。

基本特性

  • MQTT是一种发布/订阅的传输协议
    MQTT 协议提供一对多的消息发布,可以解除应用程序耦合,信息冗余小。该协议需要客户端和服务端,而协议中主要有三种身份:发布者(Publisher)、代理(Broker,服务器)、订阅者(Subscriber)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,而消息发布者可以同时是订阅者,实现了生产者与消费者的脱耦。
  • 基于 TCP/IP 提供网络连接,提供有序、无损、双向连接
  • 对负载内容屏蔽的消息传输(安全性)
  • 具体有三种消息发布的服务质量:
    • 至多一次,消息发布完全依赖底层 TCP/IP 网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。
    • 至少一次,确保消息到达,但消息重复可能会发生。
    • 只有一次,确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。
  • 小型传输,开销小,固定长度的头部是 2 字节,协议交换最小化,以降低网络流量
    整体上协议可拆分为:固定头部+可变头部+消息体,这就是为什么在介绍里说它非常适合"在物联网领域,传感器与服务器的通信,信息的收集"。
  • 使用Last Will和Testament特性通知有关各方客户端异常中断的机制
    Last Will:即遗言机制,用于通知同一主题下的其他设备发送遗言的设备已经断开了连接。
    Testament:遗嘱机制,功能类似于Last Will。

基本概念

MQTT 客户端

  • 发布消息
  • 订阅消息
  • 退订或删除消息
  • 断开与服务器连接

MQTT 服务端 Broker(消息代理)

  • 接受来自客户端的网络连接
  • 接受客户端发布的应用信息
  • 处理来自客户端的订阅和退订请求
  • 向订阅的客户转发应用程序消息

主题(topic)

连接到一个应用程序消息的标签,该标签与服务器的订阅相匹配。服务器会将消息发送给订阅所匹配标签的每个客户端。

要订阅的主题。一个主题可以有多个级别,级别之间用斜杠字符分隔。例如,/world 和 emq/emqtt/emqx 是有效的主题。

订阅者的Topic name支持通配符#和+ :

  • #支持一个主题内任意级别话题
  • +只匹配一个主题级别的通配符

客户端成功订阅某个主题后,代理会返回一条 SUBACK 消息,其中包含一个或多个 returnCode 参数

主题筛选器(Topic Filter)

一个对主题名通配符筛选器,在订阅表达式中使用,表示订阅所匹配到的多个主题。

QoS(消息传递的服务质量水平)

服务质量,标志表明此主题范围内的消息传送到客户端所需的一致程度。

  • 值 0:不可靠,消息基本上仅传送一次,如果当时客户端不可用,则会丢失该消息。
  • 值 1:消息应传送至少 1 次。
  • 值 2:消息仅传送一次。