Python 集成 MQTT
安装 MQTT 服务器
添加依赖并且更新
sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa
sudo apt-get update
安装 mosquitto
sudo apt-get install mosquitto
mosquitto 拥有的操作指令
ubuntu@ubuntu:~$ sudo service mosquitto
* Usage: /etc/init.d/mosquitto {start|stop|reload|force-reload|restart|try-restart|status}
查看是否启动
shell
ubuntu@ubuntu:~$ sudo service mosquitto status
● mosquitto.service - Mosquitto MQTT Broker
Loaded: loaded (/lib/systemd/system/mosquitto.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2024-03-09 06:52:17 UTC; 14min ago
Docs: man:mosquitto.conf(5)
man:mosquitto(8)
Process: 5284 ExecStartPre=/bin/mkdir -m 740 -p /var/log/mosquitto (code=exited, status=0/SUCCESS)
Process: 5285 ExecStartPre=/bin/chown mosquitto:mosquitto /var/log/mosquitto (code=exited, status=0/SUCCESS)
Process: 5286 ExecStartPre=/bin/mkdir -m 740 -p /run/mosquitto (code=exited, status=0/SUCCESS)
Process: 5287 ExecStartPre=/bin/chown mosquitto:mosquitto /run/mosquitto (code=exited, status=0/SUCCESS)
Main PID: 5288 (mosquitto)
Tasks: 1 (limit: 4515)
Memory: 1.8M
CPU: 338ms
CGroup: /system.slice/mosquitto.service
└─5288 /usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf
Mar 09 06:52:17 ubuntu systemd[1]: Starting Mosquitto MQTT Broker...
Mar 09 06:52:17 ubuntu systemd[1]: Started Mosquitto MQTT Broker.
看到第四行的 active(running)
说明已经启动了
在本地终端测试
TIP
需要先安装客户端
sudo apt install mosquitto-clients
安装好客户端之后,就可以使用命令行进行测试了。
发布的命令
mosquitto_pub 命令参数说明
-d 打印debug信息
-f 将指定文件的内容作为发送消息的内容
-h 指定要连接的域名 默认为 localhost
-i 指定要给哪个 clientId 的用户发送消息
-I 指定给哪个 clientId 前缀的用户发送消息
-m 消息内容
-n 发送一个空(null)消息
-p 连接端口号
-q 指定 QoS 的值(0,1,2)
-t 指定 topic
-u 指定 broker 访问用户
-P 指定 broker 访问密码
-V 指定 MQTT 协议版本
–will-payload 指定一个消息,该消息当客户端与 broker 意外断开连接时发出。该参数需要与 –will-topic 一起使用
–will-qos Will 的 QoS 值。该参数需要与 –will-topic 一起使用
–will-retain 指定 Will 消息被当做一个 retain 消息(即消息被广播后,该消息被保留起来)。该参数需要与 –will-topic 一起使用
–will-topic 用户发送 Will 消息的 topic
订阅的命令
mosquitto_sub 命令参数说明
-c 设定 `clean session` 为无效状态,这样一直保持订阅状态,即便是已经失去连接,如果再次连接仍旧能够接收的断开期间发送的消息。
-d 打印 debug 信息
-h 指定要连接的域名 默认为 localhost
-i 指定 clientId
-I 指定 clientId 前缀
-k keepalive 每隔一段时间,发PING消息通知 broker,仍处于连接状态。 默认为60秒。
-q 指定希望接收到 QoS 为什么的消息 默认 QoS 为 0
-R 不显示陈旧的消息
-t 订阅 topic
-v 打印消息
–will-payload 指定一个消息,该消息当客户端与 broker 意外断开连接时发出。该参数需要与 –will-topic 一起使用
–will-qos Will 的 QoS 值。该参数需要与 –will-topic 一起使用
–will-retain 指定 Will 消息被当做一个 retain 消息(即消息被广播后,该消息被保留起来)。该参数需要与 –will-topic 一起使用
–will-topic 用户发送 Will 消息的 topic
然后开两个窗口,直接在 terminal 下面先订阅,然后再发布如果测试成功说明安装没有问题。
订阅一个话题
mosquitto_sub -t test
发布一个话题 test
mosquitto_pub -t test -m "测试"
发布话题之后,订阅里面有内容就说明测试成功了。
链接服务器
默认情况下,只能进行本地连接。 如果想远程连接,就需要对服务器进行配置。
先查看配置文件
shell
buntu@ubuntu:~$ cat /etc/mosquitto/mosquitto.conf
# Place your local configuration in /etc/mosquitto/conf.d/
#
# A full description of the configuration file is at
# /usr/share/doc/mosquitto/examples/mosquitto.conf.example
persistence true
persistence_location /var/lib/mosquitto/
log_dest file /var/log/mosquitto/mosquitto.log
include_dir /etc/mosquitto/conf.d
第二行说明配置文件全部放在第 12 行的目录里面。
新增配置文件,并添加端口号
shell
listener 1883 0.0.0.0
允许匿名访问
shell
allow_anonymous false
链接服务器,可以使用客户端,也可以使用代码。这里我就直接以代码为示例进行测试了。
参考
EMQX vs Mosquitto | 2023 MQTT Broker 对比:https://www.emqx.com/zh/blog/emqx-vs-mosquitto-2023-mqtt-broker-comparison
https://blog.csdn.net/qq_41930631/article/details/123915782
https://www.cnblogs.com/flzidea/p/17833655.html
https://www.arubacloud.com/tutorial/how-to-install-and-secure-mosquitto-on-ubuntu-20-04.aspx