从Mosquitto到EMQX:HomeAssistant用户的智能家居MQTT升级指南
为什么要从Mosquitto换到EMQX?
刚开始玩HomeAssistant的时候,我选择了Mosquitto作为MQTT服务器。确实,Mosquitto够轻量,安装简单,对于几十个设备的小规模智能家居系统来说完全够用。但是用了一段时间后,问题就来了。
最明显的就是没有Web管理界面,想看看连接状态、消息流量都得靠命令行,对新手很不友好。设备一多,性能就跟不上了,经常出现消息延迟,特别是当你的智能家居设备超过50个的时候。想做点复杂的规则处理,基本没戏,出了问题排查困难,日志信息也很有限。
这时候就该考虑EMQX了。EMQX是个企业级的MQTT服务器,功能强大得多。自带Web控制台,可视化管理超方便,性能强劲,单机能撑百万连接。内置规则引擎,可以直接处理消息,支持集群部署,扩展性好,监控告警完善,问题排查容易。如果你的智能设备超过50个,需要复杂的自动化规则,对系统稳定性要求高,或者想要专业的监控和管理界面,那EMQX绝对是更好的选择。
EMQX安装过程:使用飞牛os
在docker中下载镜像:emqx/emqx-enterprise
新建容器开放以下端口:

添加持久化存储:

EMQX安装过程:使用终端
首先需要创建数据目录来持久化存储数据和日志。在服务器上执行mkdir -p /opt/emqx/data和mkdir -p /opt/emqx/log来创建必要的目录。
接下来运行EMQX容器。使用docker run命令,设置容器名为emqx,启用自动重启,映射必要的端口。其中1883是MQTT协议端口,8083是WebSocket端口,8084是WebSocket SSL端口,8883是MQTT SSL端口,18083是Web管理控制台端口。同时要挂载数据和日志目录到宿主机,确保数据持久化。完整命令是:
docker run -d --name emqx --restart=always -p 1883:1883 -p 8083:8083 -p 8084:8084 -p 8883:8883 -p 18083:18083 -v /opt/emqx/data:/opt/emqx/data -v /opt/emqx/log:/opt/emqx/log emqx/emqx:latest。
docker启动后,浏览器打开18083端口,使用默认的用户名密码admin/public登录。就可以进行后台管理了。

当设备数量较多时,可能需要对EMQX进行一些性能调优。如果使用Docker方式部署,可以通过-m参数限制容器内存使用量,比如设置为2GB。这样能避免EMQX占用过多系统资源影响其他服务。
默认的最大连接数是1024000,对于家庭智能家居系统来说绰绰有余。如果确实需要调整,可以在管理菜单的配置页面找到MQTT通用设置,修改max_connections参数。对于HomeAssistant这种需要订阅大量主题的客户端,可以增加消息队列长度。在MQTT会话配置中,将max_mqueue_len设置为10000或更高,这样能避免消息积压导致的延迟问题。
好消息是从Mosquitto迁移到EMQX非常简单,大部分情况下只需要修改MQTT服务器地址就行了。设备端的代码基本不用改,因为两者都遵循标准的MQTT协议。
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~
