Alternate Text

EMQX消息服务器 开源项目教程

物联网IoT

EMQX 是高性能、分布式 MQTT 消息中间件,支持 MQTT 3.1/3.1.1/5.0,同时兼容 MQTT-SN、CoAP、LwM2M、WebSocket 等物联网协议。 EMQX 管理系统(Dashboard)是 EMQX 内置 Web 可视化后台,**不需要额外单独安装**,部署 EMQX 之后直接开启即可访问。

2026-09-07 14 T13611764069

一、系统简介

EMQX 是高性能、分布式 MQTT 消息中间件,支持 MQTT 3.1/3.1.1/5.0,同时兼容 MQTT-SN、CoAP、LwM2M、WebSocket 等物联网协议。 EMQX 管理系统(Dashboard)是 EMQX 内置 Web 可视化后台,不需要额外单独安装,部署 EMQX 之后直接开启即可访问。 作用:可视化查看连接设备、消息流量、主题订阅、客户端管理、规则引擎、权限配置、集群管理、监控告警,替代命令行操作。

默认地址:http://IP:18083 默认账号密码:admin / public(生产环境必须立刻修改密码)

端口说明:

· 18083:Dashboard Web 管理端口

· 1883:MQTT TCP 端口

· 8083:MQTT over WebSocket

· 8883:MQTT TLS 加密端口

二、EMQX 管理系统核心功能

1. 概览(Dashboard 首页)

· 实时指标:在线连接数、消息收发速率、消息总数、订阅数量、节点状态

· 监控图表:消息吞吐量、连接数变化、内存 / CPU 占用

· 告警面板:异常连接、消息堆积、节点离线提示

2. 客户端管理(Clients)

查看所有接入设备:客户端 ID、IP、连接时间、协议版本、是否在线、清理会话标记、心跳时间。 支持操作:踢下线指定设备、查询该客户端订阅的所有主题。

3. 订阅管理(Subscriptions)

查看全量设备主题订阅关系,可以按主题、客户端筛选,查看哪些设备订阅了哪个 topic。

4. 主题路由(Topics)

查看系统中存在的 MQTT 主题,统计每个主题消息流量。

5. 规则引擎(Rules)⭐最核心功能

消息流转处理,MQTT 消息到达后,触发自定义规则:

· 消息转发:写入 MySQL/PostgreSQL/Redis/InfluxDB/Kafka

· Webhook:把设备消息推送到后端 HTTP 接口

· 消息过滤:按主题、payload 条件筛选消息

· 消息转换:修改 payload 字段、新增字段

· 桥接:转发消息到另一个 MQTT 服务器(EMQX 桥接)

常用场景:设备上报传感器数据 → EMQX 规则引擎 → 存入数据库。

6. 认证与授权(Access Control)

控制设备能不能连接、能不能发布 / 订阅主题:

1. 认证(Authentication):设备登录校验,支持密码、数据库、JWT、HTTP 接口认证

2. 授权(Authorization):连接成功后,限制设备只能发布 / 订阅哪些主题

默认是public匿名访问,生产务必关闭匿名,否则任何人都可以连上来收发消息!

7. 集群管理

多节点 EMQX 集群可视化:查看集群所有节点状态、节点负载,增加 / 移除节点。

8. 消息测试工具(Web 客户端)

Dashboard 内置 MQTT 测试客户端,可以直接在网页上:

· 创建测试客户端

· 订阅主题、发布消息

· 调试设备通信,不用额外装 MQTTX

9. 告警 & 监控

支持配置告警:连接突降、消息堆积、节点 CPU 过高,支持邮件 / Webhook 推送告警。

10. 插件管理

启用 / 禁用 EMQX 插件:比如 prometheus 监控、日志插件、桥接插件等。

11. 日志

查看系统日志、客户端连接日志、规则引擎执行日志,排查设备连不上、消息丢包问题。

三、EMQX 优缺点

✅ 优点

1. 性能极强:单节点可承载百万级 MQTT 长连接,分布式横向扩展,适合海量物联网设备。

2. 协议丰富:原生支持 MQTT5,websocket MQTT,方便前端网页直接连接设备消息。

3. 内置 Dashboard 可视化管理,开箱即用,不用自己开发运维后台。

4. 强大规则引擎:消息落地数据库、转发第三方服务非常方便。

5. 开源免费:社区版开源,商用也免费(社区版协议 Apache2.0)。

6. 跨平台:支持 Linux、Windows、Docker、K8s 部署。

7. 丰富的认证授权方案,支持 TLS 加密连接,保障物联网通信安全。

❌ 缺点

1. 资源占用:百万长连接场景,内存消耗较高;大量消息吞吐对服务器 CPU 要求高。

2. 学习成本:MQTT 协议本身有 QoS、保留消息、遗嘱消息等概念,新手容易踩坑。

3. 持久化限制:社区版消息持久化能力有限,不适合当作数据库,只做消息转发。消息堆积过多会导致性能暴跌。

4. Windows 生产稳定性一般,官方推荐 Linux 作为生产环境。

5. 高级企业功能(审计、高级集群、技术支持)需要购买企业版。

6. 规则引擎语法为 HCL,上手需要学习。

四、保姆级部署教程(3 种方式,推荐 Docker 最简部署)

环境建议:生产使用 Ubuntu / CentOS Linux;测试可用 Windows。防火墙放行端口:18083,1883,8083

方式一:Docker 部署(推荐,最简单,快速体验)

前提:服务器已经装好 docker、docker-compose

1. 创建文件夹,新建docker-compose.yml

version: '3'

services:

 emqx:

   image: emqx/emqx:5.8.0

   container_name: emqx

   restart: always

   ports:

     - "1883:1883"    # MQTT TCP

     - "8083:8083"    # MQTT over websocket

     - "18083:18083"  # Dashboard管理后台

   environment:

     EMQX_DASHBOARD__DEFAULT_USER__PASSWORD: "Admin@123456" #自定义初始密码,不要用默认public

   volumes:

     - ./emqx_data:/opt/emqx/data

     - ./emqx_log:/opt/emqx/log

1. 启动 EMQX

docker-compose up -d

1. 访问管理后台 浏览器打开 http://服务器IP:18083 账号:admin,密码:Admin@123456

停止命令:docker-compose down

方式二:Linux 二进制包部署(生产裸机部署,Ubuntu 示例)

1. 下载 EMQX 5.x 安装包

# 导入EMQX GPG密钥

curl -fsSL https://www.emqx.com/en/downloads/broker/v5.8.0/emqx-5.8.0-ubuntu22.04-amd64.deb -o emqx.deb

1. 安装

sudo apt install ./emqx.deb

1. 启动服务,设置开机自启

sudo systemctl start emqx

sudo systemctl enable emqx

1. 修改默认管理员密码

emqx ctl admins update admin Admin@123456

1. 访问:http://服务器IP:18083

常用命令:

emqx ctl status   #查看状态

sudo systemctl stop emqx #停止服务

sudo systemctl restart emqx #重启

方式三:Windows 部署(仅本地测试,不建议生产)

1. 官网下载 EMQX windows zip 包

2. 解压,打开 cmd 进入 bin 目录

3. 启动:emqx start

4. 浏览器访问

五、EMQX 管理系统保姆级使用流程(部署后必做步骤)

第一次登录系统,按顺序操作:

步骤 1:修改管理员密码(必做!)

登录 Dashboard → 右上角头像 → 修改密码,不要使用默认public。

步骤 2:关闭匿名访问(生产必做)

左侧菜单【访问控制】→【认证】

· 找到password_based:built_in_database内置数据库认证,启用

· 关闭【匿名认证】,否则设备不需要账号密码就能接入。

步骤 3:创建设备账号

访问控制 → 认证 → 用户 点击创建用户:填写客户端用户名、密码,设备连接时需要填写这个账号密码。

区分:管理员账号是登录 Dashboard 后台;设备账号是 MQTT 客户端连接使用。

步骤 4:测试收发消息(内置 Web 客户端调试)

左侧【工具】→【MQTT 客户端】

1. 新建连接:填入 MQTT 连接信息,使用刚才创建的设备账号密码连接

2. 订阅主题:例如 device/+/data

3. 发布消息:向主题发消息,观察接收,验证通信是否正常

步骤 5:配置规则引擎(消息入库示例)

左侧【规则引擎】→【规则】 新建规则,编写 SQL,示例:

SELECT

 payload,

 clientid,

 topic,

 timestamp

FROM

 "t/#"

然后添加动作,比如发送到 HTTP Webhook 或者写入 MySQL 数据库。

步骤 6:查看监控

首页看连接数,【监控】面板查看消息吞吐,排查设备断线、消息丢失。

六、常见坑 & 排错指南

1. 无法访问 18083 页面

· 服务器防火墙没有放行 18083 端口

· 云服务器安全组(阿里云 / 腾讯云)没开放端口

· EMQX 没有正常启动,emqx ctl status查看状态

2. MQTT 客户端连不上 1883

· 检查安全组 / 防火墙放行 1883

· 匿名关闭后,客户端必须填写正确用户名密码

· MQTT 版本不匹配(老设备 MQTT3.1)

3. 消息发出去收不到

· 检查主题大小写!MQTT 主题区分大小写

· QoS 0 消息不保证送达,网络波动会丢消息

· 客户端订阅主题写错

4. 大量设备频繁断线

· 心跳时间设置不合理

· 服务器带宽不足

· 服务器内存打满

七、安全最佳实践(生产环境)

1. 修改 Dashboard 管理员密码,不要弱密码

2. 关闭匿名访问,所有设备必须账号认证

3. 使用 TLS 加密(8883 端口),避免明文传输

4. 使用授权策略,限制设备只能发布自己的主题,防止越权订阅

5. Dashboard 后台端口 18083 不要对公网直接开放,建议内网访问 + VPN

6. 定期备份 emqx 内置数据库

八、附录:术语简释

· ClientID:设备唯一 ID,MQTT 客户端标识

· Topic:消息主题,类似消息路由地址

· QoS:消息服务质量(0 最多一次 /1 至少一次 /2 仅一次)

· Retain 保留消息:新订阅设备可以收到最近一条消息

· Will 遗嘱消息:设备异常离线,自动发送遗嘱消息