调研报告之MQTT协议
1.前言
MQTT(MessageQueueing Telemetry Transport Protocol)的全称是消息队列遥感传输协议的缩写,是由IBM公司推出的一种基于轻量级代理的发布/订阅模式的消息传输协议,运行在TCP协议栈之上,为其提供有序、可靠、双向连接的网络连接保证。由于其开放、简单和易于实现所以能够应用在资源受限的环境中,对于M2M和物联网应用程序来说是一个相当不错的选择。 至于我为什么要研究这个东西,主要是因为我服务于一家物联网公司,主要的产品就是生产传感器,然后获取数据,进行分析,计算和展示,而设备的协议就是MQTT协议,又因为我的后端技术栈是java,我就想有没有java现成的开源软件可以拿来直接用,于是就有了这篇文章。
以智能家居为例,智能家居中智能灯光控制,可以使用XMPP协议控制灯的开关;智能家居的电力供给,发电厂的发动机组的监控可以使用DDS协议;当电力输送到千家万户时,电力线的巡查和维护,可以使用MQTT协议;家里的所有电器的电量消耗,可以使用AMQP协议,传输到云端或家庭网关中进行分析;最后用户想把自家的能耗查询服务公布到互联网上,那么可以使用REST/HTTP来开放API服务。
还有就是一些比较常听的协议的关系:
NB-IoT,LORA,WIFI,蓝牙,zigbee,4G都是物理层的,这几个都需要芯片模组支持(硬件支持)
而MQTT,COAP,HTTP都是应用层协议,这些需要开发服务器,或者对接云平台厂商(软件支持)
所以(MQTT,COAP,HTTP)是居于(NB-IoT,LORA,WIFI,蓝牙,zigbee,4G)的上层协议
物理层的协议,我觉得应该算是传输协议,而应用层的协议,我觉得可以归结为通讯协议,就像参考文章6中说的,
物联网的通信环境有Ethernet, Wi-Fi, RFID, NFC(近距离无线通信), Zigbee, 6LoWPAN(IPV6低速无线版本),Bluetooth, GSM, GPRS, GPS, 3G, 4G等网络,而每一种通信应用协议都有一定适用范围。AMQP、JMS、REST/HTTP都是工作在以太网,COAP协议是专门为资源受限设备开发的协议,而DDS和MQTT的兼容性则强很多。
1.深度分析IOT的七大通信协议 这里介绍一下七种常用的物联网协议:REST/HTTP(松耦合服务调用)、CoAP协议、MQTT协议(低带宽)、DDS协议(高可靠性、实时)、AMQP协议(互操作性)、XMPP协议(即时通信)、JMS
2.MQTT 入门介绍 对MQTT的协议内容和作用,有一个整体的介绍
3.MQTT 协议 emqx官网,有对mqtt协议的介绍,也有示例:在 Flutter 项目中使用 MQTT、Android 使用 Kotlin 连接 MQTT、ESP8266 连接到免费的公共 MQTT 服务器、在树莓派上使用 MQTT 、如何在 Python 中使用 MQTT、如何在 Golang 中使用 MQTT、如何在 Vue 项目中使用 MQTT、使用 WebSocket 连接 MQTT 服务器、如何在 Electron 项目中使用 MQTT
4.MQTT协议规范 阿里云物联网平台,主要接收两种协议,一种是MQTT协议,一种是CoAP协议,还有就是使用HTTP协议,这里主要就是介绍,如何使用开放协议,接入到阿里云的物联网平台
5.NB-IoT,LORA,wifi,蓝牙,zigbee,MQTT,COAP之间的关系 这个关于MQTT和物理层的协议倒是让我有了一定的区分,一个是应用层的协议,一个是物理层的协议。TCP/IP传输协议是严格来说是一个四层的体系结构,应用层、传输层、网络层和数据链路层;OSI七层协议模型主要是:应用层(Application)、表示层(Presentation)、会话层(Session)、传输层(Transport)、网络层(Network)、数据链路层(Data Link)、物理层(Physical)。
6.IOT(物联网)的七大通信协议
2.常见的开源服务器
主流的可能就是mosquitto还有EMQX这两种了吧,至于两者有什么性能的差异,其实我是看不出来的,都是靠别人进行说明的,对于刚入门的人来说,到底说的清两者之间的差异吗?不好说。我觉得提供的EMQX功能更加的丰富吧,还可以加钱,获得更高更优质的服务。
1.物联网MQTT协议分析和开源Mosquitto部署验证
2.常见MQTT服务器搭建与试用 这里介绍了三种MQTT服务器:EMQX、Mosquitto、Apollo,主要介绍了EMQX的windows端搭建和测试。
3.【经验分享】如何搭建本地MQTT服务器(Windows ),并进行上下行调测 EMQTT
4.EMQ X | 百万级的开源MQTT消息服务器(搭建一个私有MQTT服务器)
5.36氪首发 | 面向物联网时代打造开源基础软件,「EMQ」获高瓴创投领投近1.5亿元B轮融资 这个是一个宣传文章,我就不说了,反正就是很厉害就对了。
6.2020 年常见 MQTT 客户端工具比较 客户端工具主要有:MQTT X、Mosquitto CLI、MQTT.fx、MQTT Explorer、MQTT Box、mqtt-spy、MQTT Lens、MQTT WebSocket Toolkit
7.MQTT物联网服务器搭建工具:EMQ Broker与Mosquitto Broker 这里说是比较,其实就是没有比较,就是两种不同的MQTT服务器搭建的过程
4.emqx
emqx 是一个提供mqtt协议的服务端,使用的人还是挺多的,大疆的无人机也是使用的这个东西进行的。安装和启动emqx服务器,这个部分我在另外一篇文章中进行说明好了。
1. emqx /emqx emqx的源码地址,star有8k之多,但是这个star的东西吧,不好说,比如我就是喜欢star,不管这个有没有用,好不好用,我自己会不会用,我只要看到了,了解到了,准备要用了,就会star,而且不取消。
2.安装 这里有详细的安装和配置步骤
3.Mosquitto
3.和java技术的整合
根据参考资料,主要有两类,一类是Paho Java,一类是mqtt-client
1.java实现mqtt服务端_EMQ X MQTT 服务器 v4.1-beta.1 发布 - 支持 Java 等多语言扩展
2.Mqtt的broker技术选型
3.Java 连接 MQTT 服务器 使用mqtt-client这个maven依赖,进行服务器连接。
4.MQTT Java 客户端库 这是EMQX提供的使用 Paho Java 这个库的示例,在文章的最后,说是Paho Java还在适配MQTT v5.0版本中
5.【微信小程序控制硬件①】 全网首发,借助 emq 消息服务器带你如何搭建微信小程序的mqtt服务器,轻松控制智能硬件! 这一篇的系列教程,也算是一个入门教程,就是如何使用微信小程序,结合websocket,加上mqtt等的协议,实现的可以通过微信小程序,控制智能家居的功能。