MQTT 简介

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

 

1.MQTT是一种发布/订阅传输协议

主要有三种身份:发布者(Publisher)、代理(Broker,服务器)、订阅者(Subscriber)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,而消息发布者可以同时是订阅者,实现了生产者与消费者的脱耦。

 

2.使用 TCP/IP 提供网络连接,提供有序、无损、双向连接

 

3.对负载内容屏蔽的消息传输;

 

4.具体有三种消息发布的服务质量:

  • 至多一次,消息发布完全依赖底层 TCP/IP 网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。
  • 至少一次,确保消息到达,但消息重复可能会发生。
  • 只有一次,确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。

 

5.小型传输,开销小,固定长度的头部是 2 字节,协议交换最小化,以降低网络流量;

 

6.使用Last Will和Testament特性通知有关各方客户端异常中断的机制;

Last Will:即遗言机制,用于通知同一主题下的其他设备发送遗言的设备已经断开了连接。

Testament:遗嘱机制,功能类似于Last Will。

 

 

 

假设现在有一个物联网的应用,题主当然可以直接用TCP socket 做通信,实际上不少人也是这么做的。然后你就会发现:

* 需要自己写确认重传的机制,因为TCP 连接说不定就断了。

* 如果有很多个传感器(生产者),又要写代码管理这么多TCP连接呢。

* 如果同时又有多个地方需要用到这些数据,还得写一个转发的逻辑。

* 如果系统很复杂,参与人或公司很多,那通信格式要怎么定,怎么改,沟通成本就很大了。

这些东西这么麻烦,又不想加班写代码,那有没有办法简便地解决呢?当然有,就是用现成的协议啦,比如MQTT。

MQTT 提供两个核心功能:

* 三个级别的QOS

QoS 0:“最多一次”,消息发布完全依赖底层 TCP/IP 网络。分发的消息可能丢失或重复。例如,这个等级可用于环境传感器数据,单次的数据丢失没关系,因为不久后还会有第二次发送。

QoS 1:“至少一次”,确保消息可以到达,但消息可能会重复。

QoS 2:“只有一次”,确保消息只到达一次。例如,这个等级可用在一个计费系统中,这里如果消息重复或丢失会导致不正确的收费。

 

*基于订阅/发布的消息转发服务。

用了MQTT, 上面提到的这些问题就都被优雅地解决掉啦。

猜你喜欢

转载自blog.csdn.net/mao834099514/article/details/106721772
今日推荐