物联网开发必备:常见MQTT协议服务器Broker--EMQX

物联网开发必备:常见MQTT协议服务器Broker--EMQX

文章目录

在物联网项目开发中,选择一款稳定、高性能的 MQTT Broker 是整个系统架构的基石。如果你正在寻找一款开源、功能强大、社区活跃且生产级可用的 MQTT 消息服务器,EMQX 绝对是绕不开的首选方案。本文将带你从零开始,全面认识 EMQX,并完成从安装到实际使用的完整流程。

emqx Github开源地址:https://github.com/emqx/emqx,emqx 官网地址:https://www.emqx.com/en

一、EMQX 是什么

EMQX(Erlang MQTT Broker)是由杭州映云科技(EMQ)开源的云原生分布式物联网 MQTT 消息服务器,也是目前全球应用最广泛的开源 MQTT Broker。它基于高性能的 Erlang/OTP 语言开发,专为海量物联网设备连接与高并发消息吞吐设计,单集群可支持亿级 MQTT 连接,是国内物联网领域的事实标准产品。

简单来说,EMQX 就是 MQTT 协议的服务端实现 ------ 设备端通过 MQTT 协议连接上来,发布消息、订阅主题,EMQX 负责完成消息的路由、转发、存储与管理。

为什么选择 EMQX

  • 性能强悍:单节点支持百万级并发连接,集群可达亿级,消息吞吐可达百万级 TPS
  • 协议完整:完整支持 MQTT 3.1 / 3.1.1 / 5.0 全版本标准,同时兼容 MQTT over QUIC、WebSocket、CoAP 等多种协议
  • 开箱即用:内置可视化 Dashboard,丰富的管理 API,部署后立即可用
  • 生态完善:配套 MQTTX 客户端、Neuron 工业网关等周边工具,社区活跃
  • 扩展能力强:内置规则引擎、数据集成,可无缝对接 MySQL、Kafka、InfluxDB 等数十种后端服务
  • 开源免费:开源版完全满足绝大多数中小型项目需求,企业版提供更多高级功能与商业支持

二、核心功能与能力概览

1. 完整的 MQTT 协议支持

EMQX 是目前对 MQTT 标准支持最完整的 Broker 之一:

  • 协议版本:MQTT 3.1、MQTT 3.1.1、MQTT 5.0 全版本兼容
  • QoS 等级:完整支持 QoS 0 / QoS 1 / QoS 2 三级服务质量
  • 核心特性:保留消息(Retain)、遗嘱消息(Will)、持久会话、共享订阅、主题重写、延迟发布
  • 传输方式:支持 TCP 明文、TLS/SSL 加密、WebSocket、MQTT over QUIC

2. 可视化管理控制台

内置 Web Dashboard 管理后台,无需额外安装,启动即可通过浏览器访问,提供:

  • 连接数、消息吞吐、主题数量等实时运行指标监控
  • 客户端连接管理、订阅查询、消息追踪
  • 用户认证、权限配置、规则引擎可视化编排
  • 系统日志、告警配置、集群状态查看

3. 规则引擎与数据集成

这是 EMQX 最具实用价值的特性之一。通过 SQL 风格的规则语句,可以对设备上报的消息进行实时过滤、转换、计算,并将结果转发到各类外部系统:

  • 数据库:MySQL、PostgreSQL、MongoDB、Redis、InfluxDB、TDengine 等
  • 消息队列:Kafka、RabbitMQ、RocketMQ、Pulsar 等
  • 云服务:各类云数据库、对象存储、函数计算
  • HTTP 服务:自定义 Webhook 回调

4. 安全与认证

  • 支持用户名密码认证、JWT 认证、PSK 认证、X.509 证书认证
  • 细粒度 ACL 权限控制,可按客户端、主题限制发布 / 订阅权限
  • 全链路 TLS/SSL 加密,支持国密算法
  • 连接限速、消息速率限制、黑名单等防护机制

三、三种安装方式,按需选择

EMQX 支持多种部署方式,下面介绍最常用的三种,新手推荐优先使用 Docker 快速体验。

方式一:Docker 一键部署(推荐新手)

这是最快、最省心的安装方式,适合本地开发、测试环境使用。

前提:已安装 Docker 环境。

执行以下命令即可启动:

bash 复制代码
docker run -d \
  --name emqx \
  -p 1883:1883 \
  -p 8883:8883 \
  -p 8083:8083 \
  -p 8084:8084 \
  -p 18083:18083 \
  emqx/emqx:latest

端口说明:

  • 1883:MQTT TCP 明文端口
  • 8883:MQTT SSL/TLS 加密端口
  • 8083:MQTT over WebSocket 端口
  • 8084:MQTT over WebSocket SSL 端口
  • 18083:Dashboard 管理后台端口

启动完成后,浏览器访问 http://服务器IP:18083 即可进入管理后台,默认账号密码:

  • 用户名:admin
  • 密码:public

首次登录后建议立即修改默认密码。

以本地为例:访问http://localhost:18083/

方式二:Linux 系统安装包部署(生产推荐)

以 Ubuntu/Debian 系统为例,使用官方 deb 包安装,适合生产环境部署。

1、下载安装包

前往 EMQX 官方下载页

选择对应系统版本,或直接命令行下载:

bash 复制代码
# 以 Ubuntu 22.04 amd64 为例
wget https://www.emqx.com/zh/downloads/broker/5.9.0/emqx-5.9.0-otp26.2.1-1-ubuntu22.04-amd64.deb

2、安装

bash 复制代码
sudo dpkg -i emqx-5.9.0-otp26.2.1-1-ubuntu22.04-amd64.deb

3、启动服务

bash 复制代码
# 启动
sudo systemctl start emqx

# 设置开机自启
sudo systemctl enable emqx

# 查看状态
sudo systemctl status emqx

方式三:Windows 本地安装

Windows 环境主要用于开发调试,步骤同样简单:

  1. 前往官网下载 Windows 版本 zip 安装包
  2. 解压到任意目录,如 D:\emqx
  3. 打开命令提示符,进入解压目录的 bin 文件夹
  4. 执行启动命令:
bash 复制代码
emqx start
  1. 同样通过 http://localhost:18083 访问 Dashboard

注意:Windows 版本仅建议用于开发测试,不推荐生产环境使用。

四、快速上手:三步完成消息收发

安装完成后,我们来做一次完整的连接 - 订阅 - 发布测试,验证服务是否正常运行。

第一步:登录 Dashboard

打开浏览器访问 http://你的服务器IP:18083,输入默认账号 admin / public 登录。登录后首页可以看到当前连接数、消息吞吐、节点状态等核心指标,这说明服务已经正常运行。

第二步:使用 MQTT 客户端连接

推荐使用官方配套的 MQTTX 客户端工具,这是一款跨平台的 MQTT 调试工具,界面友好,功能齐全。

连接配置:

  • 名称:随意填写,如 本地EMQX测试
  • 主机:选择 mqtt:// 协议,填写你的服务器 IP
  • 端口:1883
  • 客户端 ID:保持自动生成即可,确保全局唯一
  • 用户名 / 密码:默认无需认证,生产环境建议配置

点击「连接」,状态变为绿色即连接成功。

第三步:订阅主题并发布消息

  1. 订阅主题 :添加订阅,主题填写 test/topic01,QoS 选择 0,确认订阅
  2. 发布消息 :在发布区域,主题填 test/topic01,Payload 输入 Hello EMQX!,点击发送
  3. 查看结果:订阅列表中会立即收到刚发布的消息

同时,回到 EMQX Dashboard 的「客户端」页面,可以看到刚刚连接的 MQTTX 客户端信息;在「主题」页面可以查询到当前的订阅关系。

五、基础配置与常用操作

1. 配置文件位置

  • Docker 版:配置文件位于容器内 /opt/emqx/etc/emqx.conf
  • Linux 安装版:/etc/emqx/emqx.conf
  • Windows 版:安装目录下 etc/emqx.conf

2. 常用配置项

bash 复制代码
# MQTT TCP 监听端口
listener.tcp.default.bind = 0.0.0.0:1883

# 最大连接数限制
listener.tcp.default.max_connections = 1024000

# Dashboard 监听端口
dashboard.listeners.http.bind = 0.0.0.0:18083

# 开启匿名认证(生产建议关闭)
mqtt.allow_anonymous = true

修改配置后需重启 EMQX 生效。

3. 常用命令

bash 复制代码
# 启动
emqx start

# 停止
emqx stop

# 重启
emqx restart

# 查看状态
emqx status

# 进入控制台
emqx console

4. 添加认证用户

生产环境务必关闭匿名登录,配置用户名密码认证:

  1. 进入 Dashboard → 访问控制 → 认证
  2. 创建认证,选择「Password-Based」→「Built-in Database」
  3. 进入用户管理页面,添加用户名和密码
  4. 回到「设置」中关闭匿名认证

六、典型应用场景

  1. 智能家居平台:海量智能设备接入,APP 远程控制,场景联动消息下发
  2. 工业物联网:产线传感器数据采集,设备状态监控,PLC 远程控制
  3. 车联网平台:车辆位置实时上报,OTA 升级通知,远程诊断指令
  4. 智慧园区:门禁、路灯、监控、环境监测设备统一接入管理
  5. 消息推送服务:移动端、Web 端实时消息推送,在线状态同步

七、写在最后

EMQX 的强大之处远不止本文介绍的这些。当你熟悉了基础使用后,还可以进一步探索规则引擎做数据清洗转发、搭建集群实现高可用、配置 TLS 证书保障传输安全、对接时序数据库存储历史数据等进阶玩法。

对于大多数物联网项目而言,EMQX 开源版的能力已经完全够用。它的优势在于性能足够强、生态足够完善、文档和社区资源丰富,遇到问题很容易找到解决方案。如果你正在做物联网相关的开发,非常建议把 EMQX 纳入你的技术栈。

下一步,不妨试着用你熟悉的编程语言(Python、Java、JavaScript 等)编写一个简单客户端,真正动手连接 EMQX 完成消息收发,理解会更加深刻。