首页 - 关于我们 - 新闻活动 - 物联讲堂 | MQTT的前世今生

物联讲堂 | MQTT的前世今生

2019-9-26新闻

image.png


物联讲堂开课啦!在这里,来给大家介绍物联网相关技术,讲解深度应用,让大家能更好的理解工业物联网价值,推动工业物联网应用落地。今天第一讲,我们就来讲讲MQTT的前世今生。

Part1   MQTT的诞生


MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是一个即时通讯协议。该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器和致动器的通信协议。


image.png


说起通讯协议,这里不得不先回顾一下最早的"摩托巴士”——MODBUS。市面上绝大多数的PLC都支持modbus协议。当电脑或者HMI需要获取某个设备或者PLC的数据时,可以通过modbus协议来进行交互。然后根据通信方式的不同,就区分了串口和以太网的,modbus rtu和modbus tcp。

后来,随着互联网的发展,就有了需要把设备的数据传到网络上来,也就是服务器,甚至前端等。于是,物联网的概念也就随之提出,并且对于协议的要求更加高,总体可以概括为:简单、可靠、并发、开源。


于是在1999年的时候,IBM设计发明了MQTT协议。其实当时发明这个协议并不是用于物联网的,而是用在一个医疗系统中。传感器采集病人的数据,然后通过这个MQTT系统,可以即时推送给医生。

image.png

随着物联网的迅速发展,MQTT被更加广泛的使用开来,更有一个专门的MQTT技术委员会,旨在负责定制基于MQTT技术的物联网标准协议。毋庸置疑,MQTT已基本占领了物联网中的重要地位。现在,在物联网的世界里,谁不接触点MQTT都不好意思说自己是搞物联网的了。


Part2   MQTT的工作机制

MQTT一般是建立在TCP协议基础上的一种协议。因此也就有了MQTT客户端和服务端。MQTT服务端一般只有一个,MQTT客户端就可以很多了,几万甚至几百万个。MQTT客户端连接上服务端之后,为了维持在线状态,客户端会向服务端发心跳。这个心跳包也就2个字节。


image.png



同时MQTT消息类型还可以有多种服务质量:


· “至多一次”,消息发布完全依赖底层 TCP/IP 网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。

· “至少一次”,确保消息到达,但消息重复可能会发生。

· “只有一次”,确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。



Part3   MQTT中的一些概念


MQTT中重要的的几个概念:登录,主题,订阅,生产,发布,Payload,消费。接下来,通过繁易小剧场—MQTT魔法餐厅,帮助大家更好的理解这些概念。


image.png

在这个环节里,MQTT餐厅好比如一个MQTT系统。

其中,服务员就是服务器,顾客和厨师就是客户端。厨师是生产者,顾客是消费者。

                                                                  【登陆】 这家MQTT魔法餐厅是会员制的,顾客和厨师需要通过身份认证才能登陆。

【主题】 本周餐厅主打“迷情西部”。

image.png

       【订阅】 顾客需要先向服务员点菜。

       【生产】 每位厨师只做一道招牌菜。

                         【发布】 厨师做完菜之后,会推送发布给服务员。

                               【Payload】菜的味道如何,即顾客获得的消息内容。

【消费】 顾客吃完买单即消费。


当然,有时候,会遇到几个客户同时点一份菜,但是MQTT餐厅中的厨师只做一份。这也没有关系,MQTT魔法餐厅里的服务员能将一份菜变成多份,可以同时发布给定了菜的顾客们。


image.png

在MQTT系统里,就存在生产,分发,消费这三个环节了。数据的交互,主要是通过主题来实现,主题可以理解为MQTT协议的灵魂

 

Part4   小结

其实MQTT协议就这样一个通用的模式,就好比美食街里有众多餐厅一样。每家餐厅都要有厨师,服务员,顾客,但各家餐厅的菜单不一样的。也就是每一家做的MQTT,协议都是一样的,登录都是需要用户名和密码设备ID等参数。但是每家的MQTT定义的主题就不一样了。可以说,100家做MQTT的,有可能99家定义的主题都不一样。总而言之,只要MQTT的框架和主题一致,无论使用何种编程语言,无论借助何种硬件平台,都能实现协议的无缝对接,达成通讯目的。