在物联网的世界里,设备之间的通信至关重要,而 MQTT 协议因其轻量级和高效性成为众多物联网项目的首选。EMQX 作为一款优秀的 MQTT Broker,凭借其强大的功能和出色的性能,成为了连接设备与实现消息传递的关键角色。
简介
EMQX 是基于 Erlang/OTP 平台开发的开源物联网 MQTT 消息服务器,是开源社区中最流行的 MQTT 消息服务器之一。它支持 MQTT V3.1.1/V5.0 协议规范,能够稳定承载大规模的 MQTT 客户端连接,单服务器节点支持 200 万连接,并且支持分布式集群架构,可实现高并发软实时消息路由。EMQX 还支持多种协议的接入,如 MQTT-SN、CoAP、LwM2M、WebSocket 等,满足不同场景下的通信需求。
主要特点
高性能与可扩展性
基于 Erlang/OTP 平台开发,天生支持分布式和高并发
单节点支持百万级 MQTT 客户端连接
支持集群扩展,轻松应对千万级连接
丰富的协议支持
全面支持 MQTT v3.1、v3.1.1 和 v5.0 协议
支持 MQTT over TCP、TLS、WebSocket、HTTP 等多种传输方式
兼容 CoAP、LwM2M 等物联网协议
灵活的认证与授权
支持用户名 / 密码认证、TLS 证书认证
支持基于 LDAP、MySQL、PostgreSQL、Redis 等外部数据源的认证
细粒度的主题访问控制
强大的消息路由与桥接
基于主题的消息发布 / 订阅模式
支持规则引擎,实现消息过滤、转换和转发
支持与外部系统(如 Kafka、RabbitMQ、HTTP 服务)的桥接
企业级功能
监控与统计:提供详细的连接、流量、消息统计
日志与告警:完善的日志系统和告警机制
安全加固:支持 TLS/DTLS 加密、IP 访问控制
安装与部署
目前EMQX最新稳定版本是5.9.0,点击跳转官网下载地址
Docker容器化部署
# 启动容器并挂载目录
docker run -d --name emqx-enterprise \
-p 1883:1883 -p 8083:8083 \
-p 8084:8084 -p 8883:8883 \
-p 18083:18083 \
-v $PWD/data:/opt/emqx/data \
-v $PWD/log:/opt/emqx/log \
emqx/emqx-enterprise:5.9.0
docker启动容器之后可能报错,我部署时就遇到了 mkdir: cannot create directory ‘/opt/emqx/data/configs’: Permission denied 错误此时别慌,遇事不决问AI呀,再不行就只能啃官方文档或者查github或gitee的issue,还不行就咨询官方客服或开源作者,当然,如果你有个技术前辈带那就最好不过啦!这里我就先给出官方的处理方案了,我这里的解决方案与官方不同,由于是演示环境,我就用root账户运行EMQX了,直接在启动容器命令时加了 --user root 搞定!
Ubuntu部署
# 下载安装压缩包
wget https://www.emqx.com/zh/downloads/enterprise/5.9.0/emqx-enterprise-5.9.0-ubuntu22.04-amd64.tar.gz
# 在当前目录创建emqx目录并解压到emqx目录
mkdir -p emqx && tar -zxvf emqx-enterprise-5.9.0-ubuntu22.04-amd64.tar.gz -C emqx
# 启动安装
./emqx/bin/emqx start
看到18083端口已经打开,即可访问EMQX的管理后台了,默认账号密码是 admin/public,每次登录后会有相关的license提示,比较烦人,如果密码忘了可以通过 ./bin/emqx ctl admins passwd <Username> <Password>
命令修改,如 ./bin/emqx ctl admins passwd admin public
上面部署方式都是采用单节点的方式,EMQX支持集群部署,而且看文档里部署过程也是比较简单的,直接采用static方式配置一下就差不多了,由于EMQX的集群是需要购买license的,这里就不作演示了,感兴趣的话可以使用docker方式,参考官方文档即可。
EMQX启动成功后会打开几个端口,以下是对应的端口说明:
MQTT 协议端口
1883: 默认的 MQTT 非加密端口。用于物联网设备、客户端应用程序通过 MQTT 协议与 EMQX Broker 建立明文连接。
8883: 默认的 MQTT SSL/TLS 加密端口。用于物联网设备、客户端应用程序通过加密的 MQTT 协议安全地连接至 EMQX Broker 。
管理端口
18083: Dashboard 和 REST API 端口。
Dashboard: 通过浏览器访问 EMQX 的 Web 管理控制台(如
http://localhost:18083
),用于用户认证、节点监控、插件配置等管理操作。REST API: 提供 HTTP API 接口(如
GET /api/v4/clients
),用于编程方式管理和监控 EMQX(如获取客户端列表、管理规则引擎)。
MQTT 增强功能端口
8083: MQTT over WebSocket 非加密端口。允许浏览器或 Web 应用通过 WebSocket 协议使用 MQTT。
8084: MQTT over WebSocket SSL/TLS 加密端口。提供安全的 WebSocket MQTT 连接。
集群通信端口
4370: Erlang 分布式协议端口 (EPMD)。用于节点发现和集群组建。
5370: Erlang 节点间通信端口 (Distributed Erlang Port)。用于集群节点间的内部通信和数据同步
配置
EMQX提供了丰富的一系列可定制配置,全部都包含在这个配置手册里了,比如基本的端口、节点、集群、安全验证、授权、日志等。配置文件在emqx安装目录下的 etc 目录名叫 emqx.conf 的文件,我们看到默认是配置了当前node节点信息以及集群与控制后台的端口号。
如果需要修改EMQX的监听配置,可以直接编辑 emqx.conf 文件,在后面追加监听内容,如将原先的18083端口改成3333端口:
dashboard {
listeners {
http.bind = 3333
# http.bind = 18083
# https.bind = 18084
https {
ssl_options {
certfile = "${EMQX_ETC_DIR}/certs/cert.pem"
keyfile = "${EMQX_ETC_DIR}/certs/key.pem"
}
}
}
}
保存后,重启EMQX服务
./emqx stop
./emqx start
总结
EMQX 作为一款开源的 MQTT Broker,凭借其高性能、高并发、灵活的扩展性和强大的管理功能,成为了物联网项目中理想的 MQTT 服务器选择。无论是智能家居、工业自动化还是智慧城市等场景,EMQX 都能够满足设备之间的高效通信需求。通过本文的介绍和教程,相信你已经对 EMQX 有了全面的了解,并掌握了如何安装、配置和使用它来搭建 MQTT 服务器。