简述
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一个基于客户端-服务器的消息发布/订阅传输协议。
安装
检查epel
源
1 | ## 如下已存在epel源,则不需要安装 |
安装
- Mac:
brew install mosquitto
- CentOS:
yum install mosquitto
启动mosquitto1
2
3
4
5
6
7
8
9
10## 启动
➜ systemctl start mosquitto
## 停止
➜ systemctl stop mosquitto
## 重新启动
➜ systemctl restart mosquitto
## 查看运行状态
➜ systemctl status mosquitto
## 设为开机启动
➜ systemctl enable mosquitto
设置账号密码
1 | ## username1 为你的用户名 |
备份配置文件
1 | cd /etc/mosquitto/ |
修改配置文件
1 | # 禁止匿名访问 |
重启MQTT
TIPS:
防火墙状态:
firewall-cmd --state
防火墙停止:
systemctl stop firewalld.service
查看防火墙zone:
firewall-cmd --get-active-zones
防火墙永久开放端口:
firewall-cmd --zone=public --add-port=1888/tcp --permanent
防火墙重启:
firewall-cmd --reload
查看所有打开的端口:
firewall-cmd --zone=public --list-ports
iptables状态:
systemctl status iptables
iptables影响mqtt远程连接,直接关闭了:
systemctl stop iptables
订阅主题
1 | [root@c7-ehotel-liudf-201 ~]# mosquitto_sub -d -h 192.168.5.201 -p 1883 -u tcl -P tcl801 -t tv/marquee/0440001/103/520012518815 |
解析:
- -d: debug模式,输出详细的连接以及数据收发过程
- -h: host
- -p: port 端口
- -u: user 用户名
- -P: possword 密码
- -t: topic 订阅主题
sending SUBSCRIBE (Mid: 1, Topic: tv/marquee/0440001/103/520012518815, QoS: 0)
表示发送订阅请求:
- Mid是Message Id,从1开始计算,当一个连接发送多条消息时,Mid是递增的。
- Topic 表示要订阅的主题时topic1。
- QoS:0指定了QoS等级,默认是0。
发布消息
1 | $ mosquitto_pub -d -h 192.168.5.201 -p 1883 -u tcl -P tcl801 -t tv/0440001/marquee -m "Hello MQTT" |
解析:
- -m 发送消息的内容
- d0表示DUP为0,DUP是是否重复标记,如果是第一次发送消息,则设置为0。如果是重复投递,比如QoS设置为1,客户端发送消息超时后服务器还没有回复,客户端为确保消息能发出去,于是再发一次,这是DUP就设置为1,表明这个消息是重复发送的。
- q0表示QoS为0。
- r0表示RETAIN为0。RETAIN意思是是否要求Broker帮我保留这条消息,如果设置为1,则服务器会保留当前消息。当下一次有新的客户端连接并订阅topic1时,服务器自动发送这条保留的消息给客户端。
- m1表示消息序号,默认从1开始。
接收消息
发布完消息后,再回到之前订阅的终端,会显示接收到的消息。
1 | Client mosqsub|30443-c7-ehotel received PUBLISH (d0, q0, r0, m0, 'tv/0440001/marquee', ... (10 bytes)) |
第一行显示收到PUBLISH数据包,第二行打印出接收到的数据。