MQTT 是基于发布/订阅模型 & TCP / IP 的“轻量级”消息协议,主要用于物联网设备(例如 ESP8266,Raspberry Pi 等)之间的通信。它在资源不足和电池供电的自动化应用(例如智能家居)中非常受欢迎,安全警报系统和电池供电的传感器网络。
Mosquitto 是实现 MQTT 协议的开源消息代理(或服务器)。凭借其良好的社区支持,文档和易于安装,它已成为最受欢迎的 MQTT Broker 之一。
1 预先准备
- 具有 root 访问权限的 Ubuntu 16.04 服务器
- 在防火墙上打开端口 TCP : 1883
2 具体步骤
2.1 安装 Mosquitto Broker
首先需要更新 Ubuntu 的软件包列表,并安装可用的最新 Mosquitto Broker,以下是对应的终端指令。
sudo apt-get update
sudo apt-get install mosquitto
Mosquitto 服务将在安装后启动。
2.2 安装 MQTT 客户端并测试
通过以下终端指令安装 MQTT 客户端。
sudo apt-get install mosquitto-clients
Mosquitto 客户端可通过命令行轻松测试 MQTT。我们将使用两个命令窗口,一个用于订阅名为的主题 “test”,另一个用于向其发布消息。
Topic 是代理用于过滤每个已连接客户端的消息的标签。例如客户端订阅Topic “test” 将仅侦听其他客户端发布到同一 Topic “test” 的消息。
以下是订阅主题 “test” 的终端指令。
mosquitto_sub -t "test"
Mosquito_sub 是我们在上一个命令中安装的订阅客户端。在这里,我们指定“ -t”,后跟主题名称。
然后可以将消息发布到主题 “test”,打开第二个终端,并向该 “test” 主题发布消息。如下。
mosquitto_pub -m "message from mosquitto_pub client" -t "test"
在这里,附加参数 –m
后跟我们要发布的消息。点击 Enter
,您应该在 mosquitto_pub client ,
mosquito_sub client以及正在运行的终端上看到消息
message from mosquitto_pub client`。
2.3 使用密码保护(可选)
Mosquitto 带有一个名为的密码文件生成实用程序 mosquitto_passwd。以下是对应的终端指令。
sudo mosquitto_passwd -c /etc/mosquitto/passwd zztest
Password: password
然后为 Mosquitto 创建一个配置文件,指向您刚刚创建的密码文件。
sudo nano /etc/mosquitto/conf.d/default.conf
这将打开一个空文件。将以下内容粘贴到其中。
allow_anonymous false
password_file /etc/mosquitto/passwd
之后使用 Ctrl+O
,Enter
和 Ctrl+X
保存并退出文本编辑器。
现在,重新启动 Mosquitto 服务器并测试您刚刚的更改。
sudo systemctl restart mosquitto
在订阅客户端窗口中,按 Ctrl+C
以退出订阅客户端并使用以下命令重新启动它。
mosquitto_sub -t "test" -u "zztest" -P "password"
注意: 上述指令输入密码为大写字母 -P。
您可以在“发布客户端”终端中,尝试发布不带密码的消息。
mosquitto_pub -t "test" -m "message from mosquitto_pub client"
该消息将被拒绝,并显示以下错误消息。
Connection Refused: not authorised.
Error: The connection was refused.
然后尝试使用 username 和 password发布消息。
mosquitto_pub -t "test" -m "message from mosquitto_pub client" -u "zztest" -P "password"
点击 Enter
,您将在订阅客户端终端中看到该消息,如第二步所示。
3 尾声
现在您已经设置了受密码保护的 MQTT 服务器。您可以将 Ubuntu 服务器的公共 IP 用作项目的 MQTT 代理。