当前位置: 首页 > 科技观察

物联网协议之王:MQTT

时间:2023-03-19 15:52:25 科技观察

今天和大家聊聊物联网协议中比较著名的协议:MQTT。让我们直截了当!什么是MQTT?英文全称:MessageQueuingTelemetryTransport中文术语:MessageQueuingTelemetryTransportProtocol一种适用于物联网设备之间通信的简单消息协议,专为带宽受限的设备使用发布/订阅通信模型进行机器对机器(M2M)通信而设计OASIS标准下基于TCP/IP的MQTT协议广泛应用于无线网络通信,覆盖面广,涵盖医疗、汽车等使用物联网应用的行业。MQTT的历史MQTT最初由AndyStanford-Clark博士和ArlenNipper博士于1999年创建,用于通过卫星连接石油管道遥测系统。两位发明者为未来的协议指定了几个要求:服务质量的简单实施数据传输轻量级和带宽高效数据不可知持久会话MQTT于2013年在结构化信息标准促进组织(OASIS)下标准化作为开源,OASIS仍然管理MQTT标准。MQTT的优势MQTT具有以下优势:易于使用MQTT快速且易于启动和运行。只需要几条命令就可以构建,启动也非常快,还有专门的管理界面。可靠许多物联网设备依靠无线电连接来传输和收集数据,这意味着连接并不总是可靠的。MQTT通过提供内置的QoS功能来减少连接问题,该功能可以对消息进行排队,将它们保存在MQTT代理中,并让它们等待直到目标设备全部设置为接受它,这减少了消息被错放的机会,因此消息注定要到达目的地。双向消息传递任何设备、事物或应用程序都可以发布或订阅由MQTT代理处理的任何主题。这不是单向的,比如只能发布或者只能订阅,它既可以发布也可以订阅,类似于全双工通信。由于Broker的存在,大规模消息无论是100万设备还是100设备,MQTT都是一样的。没有压力,因为最终的消息是传给Broker的,不管有多少client收听消息,也是从Broker上取的。MQTT的工作原理MQTT架构MQTT使用PUSH/SUBSCRIBE(发布和订阅)模型在TCP/IP之上运行。在MQTT架构中,有两种类型的系统:ClientAgent代理是客户端与之通信的服务器,代理接收来自客户端的通信并将这些通信发送给其他客户端,客户端之间不直接通信,而是连接到代理,每个客户端可以是发布者、订阅者或两者。MQTT是一种事件驱动的协议,没有周期性或连续的数据传输,从而将传输保持在最低限度。客户端仅在有信息要发送时才发布,而代理仅在新数据到达时才向订阅者发送信息。发布/订阅在发布和订阅系统中,设备可以发布关于主题的消息或订阅特定主题以接收消息。如图所示,设备1发布了某个主题的消息,设备2订阅了与设备1发布的主题相同的主题,然后设备2就可以接收到该消息。消息是设备之间交换的信息,比如一些指令,或者关于设备的一些信息,或者其他需要交换的信息。主题如图,我用一张图一句话解释:主题就是你微信订阅的类型公众号。以公众号为例,创作者是发布者,公众号的服务器是经纪人,读者是订阅者,不同领域的发布者向不同的主题(领域)发布文章。发表科技领域的文章,那么所有订阅科技领域的读者(订阅者)都可以看到我的文章。这个区域可以大致理解为主题。主题表示为由正斜杠分隔的字符串,每个正斜杠表示一个主题级别。在公众号文章类型中创建技术领域网络类型的话题如图:注意:话题区分大小写,两个话题不同:如果读者想阅读网络方向的文章:发布者在主题article/technology/network中发布OSPF相关文章订阅者订阅主题article/technology/network。当发布者在主题文章/技术/网络上有新消息时,订阅者可以订阅。Broker经纪人其实就是代理人。MQTT代理负责接收所有消息,过滤它们,决定谁对它们感兴趣,并将消息发布给所有订阅的客户端。MQTT订阅MQTT客户端不直接相互连接,而是订阅主题来接收消息。要订阅主题,客户端必须首先向代理发送订阅请求。一个SUBSCRIBE请求可以包含多个主题。代理使用SUBACK(订阅确认)响应来响应SUBSCRIBE请求。订阅还具有QoS设置,可用于降低已发布消息的QoS。在这种情况下,消息始终以较低的QoS设置发布。SubscriptionWildcardSubscriptionWildcard有两种类型:SinglelevelSinglelevelwildcard代替一个topiclevel:这个wildcard会涵盖以下话题:Article/Entertainment/WebArticle/Technology/WebArticle/Sannong/WebArticle/News/NetworkMultilevelMultilevelWildcard替换多个topiclevel:这个wildcard会覆盖以下topic:文章/娱乐/网络文章/科技/Java文章/三农/美食文章/新闻/航天QoSQoSQoS0(最多一次):Client'smessageisonlysent一次,不管它是否已经到达代理。QoS1(至少一次):客户端的消息被一遍又一遍地发送,直到broker响应一个确认接收,这可能导致消息多次到达broker。QoS2(exactlyonce):客户端发送一次消息,同时确保消息到达broker,QoS2通信需要比QoS0或1更多的带宽。MQTT的几个重要网站mqtt官网:https://mqtt.org/emqx官网:https://www.emqx.com/总结MQTT是一种轻量级的开放消息协议,它是资源受限的Web客户端提供了一种在低带宽环境下分发遥测信息的简便方法,使用publish/订阅机器对机器(M2M)通信的通信模式。