4. 搭建MQTT Broker环境:Mosquitto安装与配置(Windows/Linux)、EMQX简介、公共Broker测试

好,咱们进入实战环节。上一章聊了MQTT协议的基本原理,这一章咱们得把Broker跑起来。没有Broker,客户端之间就没法通信。我个人习惯先在本机搭一个Mosquitto,调试方便,出了问题也好排查。

4.1 为什么选Mosquitto?

Mosquitto是Eclipse基金会下的开源项目,轻量、稳定、跨平台。说白了,它就是MQTT世界的“Hello World”——几乎所有嵌入式开发者入门MQTT时,第一个接触的Broker就是它。

我在项目中遇到过几次选型纠结:用EMQX还是Mosquitto?如果是生产环境、高并发场景,EMQX更合适。但如果是开发调试、小规模部署,Mosquitto完全够用。你想想看,一个几百KB的二进制文件就能跑起来,多省心。

4.2 Windows下安装Mosquitto

Windows用户最省事。去官网下载安装包,一路Next就行。但我建议你注意两点:

  • 安装时勾选“Service”选项,这样Mosquitto会作为Windows服务自动启动
  • 安装路径不要带中文,避免一些莫名其妙的编码问题

安装完成后,打开命令提示符,输入:

net start mosquitto

如果看到“服务已启动成功”的提示,说明Broker已经在跑了。你可以用客户端工具连上去试试。

小技巧: 我个人习惯把Mosquitto的安装目录加到系统PATH里,这样在任何路径下都能直接调用mosquitto命令。

4.3 Linux下安装Mosquitto

Linux下安装更简单。以Ubuntu为例:

sudo apt update
sudo apt install mosquitto mosquitto-clients

安装完成后,Mosquitto会自动启动。你可以用以下命令检查状态:

sudo systemctl status mosquitto

如果看到“active (running)”,说明一切正常。嗯,这里要注意:默认配置下,Mosquitto只监听本地回环地址(127.0.0.1),外部设备是连不上的。你需要修改配置文件。

4.4 配置Mosquitto:从入门到能用

配置文件通常位于 /etc/mosquitto/mosquitto.conf(Linux)或安装目录下的 mosquitto.conf(Windows)。

最基本的配置,我建议你至少加上这几行:

listener 1883
allow_anonymous true
log_dest file /var/log/mosquitto/mosquitto.log

解释一下:

  • listener 1883:监听1883端口,这是MQTT的默认端口
  • allow_anonymous true:允许匿名连接。调试阶段先开着,生产环境一定要关掉
  • log_dest file:把日志写到文件里,方便排查问题
避坑指南: 我曾经在生产环境忘了关匿名连接,结果被外部设备疯狂订阅主题,Broker直接挂了。从那以后,我每次部署都会检查一遍allow_anonymous配置。

修改完配置后,重启Mosquitto:

sudo systemctl restart mosquitto

4.5 测试Mosquitto是否正常工作

用mosquitto自带的客户端工具测试一下。打开两个终端:

终端1(订阅者):

mosquitto_sub -h 127.0.0.1 -t "test/topic"

终端2(发布者):

mosquitto_pub -h 127.0.0.1 -t "test/topic" -m "Hello, MQTT!"

如果终端1收到了“Hello, MQTT!”,说明Broker工作正常。就是这么简单。

4.6 EMQX简介:当Mosquitto不够用时

Mosquitto虽然好用,但有些场景它确实力不从心。比如:

  • 需要处理上万台设备同时在线
  • 需要集群部署、高可用
  • 需要规则引擎、数据持久化

这时候就该EMQX上场了。EMQX是用Erlang写的,天生就适合高并发场景。我参与过一个智慧农业项目,用了EMQX集群,同时处理5000多个传感器节点的数据,稳得很。

EMQX的安装也很简单,官方提供了Docker镜像:

docker pull emqx/emqx:latest
docker run -d --name emqx -p 1883:1883 -p 8083:8083 -p 8084:8084 -p 18083:18083 emqx/emqx:latest

启动后,浏览器访问 http://localhost:18083,默认账号admin、密码public,就能看到EMQX的Web管理界面了。

4.7 公共Broker测试:快速验证你的客户端

有时候你手头没有服务器,或者只是想快速验证一下客户端代码能不能跑通。这时候可以用公共Broker。

常用的公共Broker有:

Broker地址 端口 说明
broker.emqx.io 1883 EMQX官方提供的测试Broker
test.mosquitto.org 1883 Mosquitto官方测试Broker
iot.eclipse.org 1883 Eclipse IoT测试Broker(已停用,仅供参考)
重要提醒: 公共Broker只适合测试,千万别用于生产环境。你发布的消息所有人都能订阅到,没有隐私可言。

用公共Broker测试时,主题命名最好加上自己的标识,比如 /test/你的名字/device1,避免和其他人冲突。

4.8 本章小结

这一章我们干了三件事:

  • 在Windows和Linux上安装了Mosquitto
  • 做了基本配置,让Broker能对外服务
  • 了解了EMQX和公共Broker的用法

下一章,咱们就要让单片机真正连上Broker,开始收发消息了。到时候你会发现,前面这些准备工作有多重要。

我的建议: 别急着往下走。先把Mosquitto跑起来,用mosquitto_pub和mosquitto_sub多玩几次,熟悉一下发布/订阅的模式。磨刀不误砍柴工。