MQTT客户端程序的编写请看博客mqtt客户端读取数据库发布消息,并订阅消息存入数据库(python编写)
文章目录
- 一、MQTT协议介绍
- 二、MQTT服务器搭建
- 三、用客户端软件连接
- 四、订阅和发布消息
- 五、总结
- 六、参考
一、MQTT协议介绍
MQTT是什么?
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(Publish/Subscribe)模式的轻量级通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布,目前最新版本为v3.1.1。MQTT最大的优点在于可以以极少的代码和有限的带宽,为远程设备提供实时可靠的消息服务。做为一种低开销、低带宽占用的即时通讯协议,MQTT在物联网、小型设备、移动应用等方面有广泛的应用。
当然,在物联网开发中,MQTT不是唯一的选择,与MQTT互相竞争的协议有XMPP和CoAP协议等,文章末尾会有一个比较和说明。
MQTT是哪一层的协议?
众所周知,TCP/IP参考模型可以分为四层:应用层、传输层、网络层、链路层。TCP和UDP位于传输层,应用层常见的协议有HTTP、FTP、SSH等。MQTT协议运行于TCP之上,属于应用层协议,因此只要是支持TCP/IP协议栈的地方,都可以使用MQTT。
MQTT消息格式
每条MQTT命令消息的消息头都包含一个固定的报头,有些消息会携带一个可变报文头和一个负荷。消息格式如下:
固定报文头 | 可变报文头 | 负荷
固定报文头(Fixed Header)
MQTT固定报文头最少有两个字节,第一字节包含消息类型(Message Type)和QoS级别等标志位。第二字节开始是剩余长度字段,该长度是后面的可变报文头加消息负载的总长度,该字段最多允许四个字节。
剩余长度字段单个字节最大值为二进制0b0111 1111,16进制0x7F。也就是说,单个字节可以描述的最大长度是127字节。为什么不是256字节呢?因为MQTT协议规定,单个字节第八位(最高位)若为1,则表示后续还有字节存在,第八位起“延续位”的作用。
例如,数字64,编码为一个字节,十进制表示为64,十六进制表示为0×40。数字321(65+2*128)编码为两个字节,重要性最低的放在前面,第一个字节为65+128=193(0xC1),第二个字节是2(0x02),表示2×128。
由于MQTT协议最多只允许使用四个字节表示剩余长度(如表1),并且最后一字节最大值只能是0x7F不能是0xFF,所以能发送的最大消息长度是256MB,而不是512MB。
二、MQTT服务器搭建
使用apollo搭建MQTT服务器,关于apollo
Apollo以ActiveMQ原型为基础,是一个更快、更可靠、更易于维护的消息代理工具。Apache称Apollo为最快、最强健的 STOMP(Streaming Text Orientated Message Protocol,流文本定向消息协议)服务器。
这里不便给出apollo的下载链接了,我用的版本是1.7.1
配置 apollo并创建broker
首先要注意一点,jdk的版本不能太高,不然将在启动Apollo时报错
java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter
具体版本不能超过多少我也不能说的准确,反正我原本时jdk11,我全部卸载掉,然后安装了jdk8,如果你恰巧也和我一样倒霉,那就赶紧去卸载吧,我在网上查找并没有什么好的办法。虽然理论上可以通过手动添加jar包的办法实现,但是不仅麻烦而且后续还是可能有错。
处理好jdk的版本问题后,进入到 apollo 下面的 bin 文件夹下,输入命令 apollo.cmd create mqttbroker(或者别的啥名字)
启动broker
使用 cmd 进入到 apache-apollo-1.7.1\bin\mybroker\bin
路径下,运行命令apollo create mybroker
运行成功如下图所示,会有一个apollo的图标。
看到给出INFO信息的最后两行,给出了目前访问服务器的IP及端口,我们任选其中一个复制,粘贴到浏览器,就可以看到登录界面了。
登录
输入Username:admin,Password:password
下面是登录成功后的界面
局域网连接
现在服务器IP是我主机的本地地址,要想使用局域网连接服务器,就要修改Ip
我这里使用的校园网的局域网IP
选择 configration 下选择 apollo.xml 文件,修改 <host_name> 属性为服务器 ip(10.60.232.117),<web_admin> 同步修改,以及 tcp 节点下将默认的 tcp://0.0.0.0:61613 修改为服务器的 ip
修改完成后,点击save即可。
然后就用局域网ip就可以访问服务器了
三、用客户端软件连接
这里给出客户端软件的下载连接
链接:https://pan.baidu.com/s/1A_M8LOUsgdqfcltx-9Fb3w 提取码:tg17
下载解压后,双击即可运行可执行文件paho.exe
点击左上角绿色加号新建一个连接
点击选项
勾选开启登录,填入用户名跟密码(admin、password)
点击MQTT输入局域网IP
点击连接
连接成功
这时就可以在服务器看到连接的IP和端口号了
四、订阅和发布消息
这里我就在我的本机上新建一个客户机测试连接(因为我还没有具体的实验环境)
按上面的步骤,我又新建了一个连接并连接成功了
可以在服务器看到
两个连接使用的相同的IP不同的端口号先在第一个客户机订阅一个消息,主题设为hello
然后在第二个客户机发布这个消息,并填上内容hello world
然后客户机1成功收到这个消息
这样就完成了一个消息的订阅与发布
五、总结
在学习了之前的有关网络通信编程的知识之后,上手MQTT才觉得这个真的是简单方便性能又强。由于MQTT在物联网应用中有着很高的地位,所以还要接着探索与学习MQTT以及实践以下它更多的应用。
MQTT客户端程序的编写请看博客mqtt客户端读取数据库发布消息,并订阅消息存入数据库(python编写)
六、参考
apollo安装与创建Apollo MQTT在windows上面环境部署与连接测试