物联网消息协议MQTT介绍

MQTT简介

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的”轻量级”通讯协议。

图片[1]-物联网消息协议MQTT介绍-不念博客
客户端服务端
一个使用MQTT协议的应用程序或者设备,它总是建立到服务器的网络连接。客户端可以:也称为”消息代理”(Broker),可以是一个应用程序或一台设备。它是位于消息发布者和订阅者之间,它可以:
– (1)发布其他客户端可能会订阅的信息;– (1)接受来自客户的网络连接;
– (2)订阅其它客户端发布的消息;– (2)接受客户发布的应用信息;
– (3)退订或删除应用程序的消息;– (3)处理来自客户端的订阅和退订请求;
– (4)断开与服务器连接。– (4)向订阅的客户转发应用程序消息。

设计原则

  • 精简,不添加可有可无的功能;
  • 发布/订阅(Pub/Sub)模式,方便消息在传感器之间传递,解耦Client/Server模式,带来的好处在于不必预先知道对方的存在(ip/port),不必同时运行;
  • 允许用户动态创建主题(不需要预先创建主题),零运维成本;
  • 把传输量降到最低以提高传输效率;
  • 把低带宽、高延迟、不稳定的网络等因素考虑在内;
  • 支持连续的会话保持和控制(心跳);
  • 理解客户端计算能力可能很低;
  • 提供服务质量( quality of service level:QoS)管理
  • 不强求传输数据的类型与格式,保持灵活性(指的是应用层业务数据)。

MQTT应用领域

  • 物联网M2M通信,物联网大数据采集
  • Android消息推送,WEB消息推送
  • 移动即时消息,例如Facebook Messenger
  • 智能硬件、智能家居、智能电器
  • 车联网通信,电动车站桩采集
  • 智慧城市、远程医疗、远程教育
  • 电力、石油与能源等行业市场

MQTT协议相关概念

MQTT协议构成

图片[2]-物联网消息协议MQTT介绍-不念博客

MQTT协议中的方法

– (1)CONNECT:客户端连接到服务器– (9)SUBACK:订阅确认
– (2)CONNACK:连接确认– (10)UNSUBSCRIBE:取消订阅
– (3)PUBLISH:发布消息– (11)UNSUBACK:取消订阅确认
– (4)PUBACK:发布确认– (12)PINGREQ:客户端发送心跳
– (5)PUBREC:发布的消息已接收– (13)PINGRESP:服务端心跳响应
– (6)PUBREL:发布的消息已释放– (14)DISCONNECT:断开连接
– (7)PUBCOMP:发布完成– (15)AUTH:认证
– (8)SUBSCRIBE:订阅请求

消息服务质量QOS

MQTT 协议中规定了消息服务质量(Quality of Service),它保证了在不同的网络环境下消息传递的可靠性,QoS 的设计是 MQTT 协议里的重点。

MQTT 设计了 3 个 QoS 等级。

– QoS 0:消息最多传递一次。

– QoS 1:消息传递至少 1 次。

– QoS 2:消息仅传送一次。

QoS0:”至多一次”,消息发布完全依赖底层TCP/IP网络,会发生消息丢失。一个消息不会被接收端应答,也不会被发送者存储并再发送。这个也被叫做“即发即弃”

图片[3]-物联网消息协议MQTT介绍-不念博客

QoS1:”至少一次”,确保消息到达,但消息重复可能会发生。发送者将会存储发送的信息直到发送者收到一次来自接收者的PUBACK格式的应答。

图片[4]-物联网消息协议MQTT介绍-不念博客

QoS2:”只有一次”,确保消息到达一次。如果接收端接收到了一个QoS为2的PUBLISH消息,它将相应地处理PUBLISH消息,并通过PUBREC消息向发送方确认。

PUBLISH:发布消息 PUBREC:发布收到 PUBREL:发布释放 PUBCOMP:发布完成

图片[5]-物联网消息协议MQTT介绍-不念博客

发送订阅不同QOS情况下是如何生效的

图片[6]-物联网消息协议MQTT介绍-不念博客

topic通配符匹配规则

图片[7]-物联网消息协议MQTT介绍-不念博客
图片[8]-物联网消息协议MQTT介绍-不念博客
图片[9]-物联网消息协议MQTT介绍-不念博客
图片[10]-物联网消息协议MQTT介绍-不念博客
© 版权声明
THE END