MQTT
1.什么是MQTT
MQTT(消息队列遥测传输)是一个基于客户端-服务器的消息发布/订阅传输协议。它工作在TCP/IP协议族上。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。
2.MQTT应用现状
因为是工作再TCP/IP协议族上的协议,所以MQTT的网络环境是wifi、网线连接的局域网或者互联网。客户端要有接入网络建立TCP连接的能力。
MQTT适用于发布/订阅场景,或者说生产/消费场景。
客户端只要订阅了主题,当主题消息发送到服务端时,服务端可以主动推送消息给客户端。
发布功能可用于传感器数据的采集。这种应用功能存在于设备监听、环境监测、大数据分析。
订阅功能可用于事件驱动的设备控制。这种应用功能存在于告警、设备联动。
发布/订阅这种逻辑易于理解,可理解为:如果设备A发生事件1,则设备B执行事件2。即使非开发人员也能对多个客户端进行编程控制,实现用户场景内的个性化、灵活多变的定制设备控制策略。
3.MQTT部署和使用示例
以Mosquitto为例,在linux系统中部署测试:
(1)官网下载源码包mosquitto-1.6.8.tar.gz (之后的版本缺少cjson依赖,比较麻烦)
(2)解压到/usr/local路径下
(3)安装依赖包
yum install gcc gcc-c++ libstdc++-devel yum install openssl-devel -y yum install c-ares-devel -y yum install uuid-devel -y yum install libuuid-devel -y
(4)增加用户
adduser mosquitto
(5)在mosquitto路径下执行
make && make install
(6)进入/etc/mosquitto,执行
cp mosquitto.conf.example mosquitto.conf
(7)启动mosquitto
mosquitto -d -c /etc/mosquitto/mosquitto.conf
(8)新开一个shell窗口,订阅主题
mosquitto_sub -i "sub" -v -h 192.168.110.68 -p 9000 -t "test" mosquitto_sub -i "sub" -v -h 192.168.2.102 -p 9000 -t "test" mosquitto_sub -i "sub" -v -h 192.168.2.102 -p 9000 -t "system/alert" -u "admin" -P "admin1111"
(9)新开一个shell窗口,发布内容,如果订阅窗口收到消息,则mqtt部署成功
mosquitto_pub -i "pub" -h 192.168.110.68 -p 9000 -t "test" -m "123" mosquitto_pub -i "pub" -h 192.168.2.102 -p 9000 -t "test" -m "123" mosquitto_pub -i "pub" -h 192.168.2.102 -p 9000 -t "system/alert" -m "客户端水位告警" -u "admin" -P "admin1111"
4.基于Netty的MQTT服务端实现-kmqtt
主要是实现MQTT协议14个数据包的解析,以及客户端与服务端的交互时序,外加扩展功能。
相关链接:
-知识:https://www.jianshu.com/p/e15608d26931
-源码:https://gitee.com/kool2017/kmqtt