NanoMQ多版本下载地址 https://www.emqx.com/zh/downloads/nanomq
NanoMQ官方文档 https://nanomq.io/docs/zh/latest/
NanoMQ 是一个专为物联网边缘计算设计的轻量级、高性能 MQTT 消息代理 (Message Broker),由中国的开源物联网公司 EMQ 开发并维护。它专注于在资源受限的边缘设备上提供高效的 MQTT 消息通信能力,同时支持与云端服务的无缝集成。
一、核心特性
-
轻量高效
- 内存占用极低 :NanoMQ 采用 C 语言开发,运行时内存占用仅 数百KB,适合嵌入式设备(如树莓派、工业网关)或低功耗边缘计算场景。
- 高吞吐低延迟 :单机支持10万+ QoS 0消息/秒的吞吐量,端到端延迟低至毫秒级,满足实时性要求高的场景。
-
协议支持
- 完整 MQTT 3.1.1/5.0 协议:支持 QoS 0/1/2、保留消息、遗嘱消息等标准功能。
- 多协议桥接 :内置 MQTT-SN、WebSocket、nanomsg 等协议转换,方便与不同设备通信。
- TLS/SSL 加密:支持 MQTT over TLS,保障数据传输安全。
-
灵活扩展
- 插件机制:通过动态加载插件支持功能扩展(如 CoAP、HTTP 桥接)。
- 规则引擎:支持 SQL 语法配置消息路由、过滤、存储到数据库(如 MySQL、TDengine)。
-
边缘-云协同
- 云端无缝集成:可一键桥接至 EMQX 企业版或 AWS IoT Core 等云平台,实现边缘数据聚合与云端分析联动。
二、架构设计
NanoMQ 采用 事件驱动模型 和 异步 I/O 设计,最大化利用硬件资源:
- 多线程模型:分离网络 I/O 与业务处理,避免阻塞。
- 零拷贝技术:减少内存复制开销,提升吞吐量。
- 模块化设计:核心服务、协议扩展、插件相互独立,按需裁剪。
三、适用场景
- 工业物联网(IIoT)
在工厂车间部署 NanoMQ,实时收集传感器数据并转发至边缘分析平台。 - 智能家居网关
作为家庭设备的 MQTT 中枢,连接 Zigbee/WiFi 设备并同步至云端。 - 车联网(V2X)
在车载终端运行,处理车辆状态消息并实时上报至云平台。 - 边缘 AI 推理
与边缘 AI 框架(如 TensorFlow Lite)集成,传递实时推理结果。
四、快速入门
-
安装
bash# Linux 安装 curl -sSL https://github.com/nanomq/nanomq/releases/download/0.15.0/nanomq-0.15.0-linux-amd64.deb sudo apt install ./nanomq-0.15.0-linux-amd64.deb
-
启动服务
bashnanomq start --conf /etc/nanomq.conf
-
测试通信
-
订阅主题:
bashnanomq_cli sub -t "sensor/data" -q 1
-
发布消息:
bashnanomq_cli pub -t "sensor/data" -m "temperature=25" -q 1
-
五、配置示例
编辑 nanomq.conf
启用 TLS 和 WebSocket:
hocon
listeners.tcp {
bind = "0.0.0.0:1883"
}
listeners.wss {
bind = "0.0.0.0:8083"
tls {
cert = "/path/to/cert.pem"
key = "/path/to/key.pem"
}
}
bridges.mqtt.cloud {
server = "mqtts://cloud.example.com:8883"
clientid = "edge_gateway_001"
username = "admin"
password = "public"
forwards = ["edge/to/cloud"]
}
六、优势与对比
特性 | NanoMQ | Mosquitto | EMQX |
---|---|---|---|
内存占用 | ~2MB | ~10MB | ~50MB |
MQTT 5.0 支持 | ✅ | ✅ | ✅ |
集群支持 | ❌ | ❌ | ✅ |
规则引擎 | 基础 SQL | ❌ | 高级 SQL + 扩展 |
适用场景 | 边缘计算 | 轻量级通用代理 | 企业级云端部署 |
七、社区与资源
- GitHub 仓库 :https://github.com/nanomq/nanomq
- 文档 :https://nanomq.io/docs/zh/latest/
- 应用案例:工业预测性维护、智慧农业边缘数据聚合、车联网实时监控。
总结
NanoMQ 是边缘计算场景下理想的 MQTT 消息中间件,凭借其极致的轻量化与高性能,填补了传统代理在资源受限环境中的空白。对于需要在边缘端实现高效数据汇聚、协议转换并连接云端的物联网系统,NanoMQ 是值得优先考虑的选择。
安装部署NanoMQ
以下是 NanoMQ 的安装与部署指南,涵盖多种操作系统和场景:
一、安装方法
1. Linux 系统
Ubuntu/Debian
bash
# 下载最新版本(以 0.15.0 为例)
wget https://github.com/nanomq/nanomq/releases/download/0.15.0/nanomq-0.15.0-linux-amd64.deb
# 安装
sudo apt install ./nanomq-0.15.0-linux-amd64.deb
# 验证安装
nanomq --version
CentOS/RHEL
bash
# 下载 RPM 包
wget https://github.com/nanomq/nanomq/releases/download/0.15.0/nanomq-0.15.0-el7-amd64.rpm
# 安装
sudo rpm -ivh nanomq-0.15.0-el7-amd64.rpm
# 启动服务
sudo systemctl start nanomq
树莓派(ARM 架构)
bash
# 下载 ARM 版
wget https://github.com/nanomq/nanomq/releases/download/0.15.0/nanomq-0.15.0-linux-arm64.deb
# 安装
sudo apt install ./nanomq-0.15.0-linux-arm64.deb
2. Windows 系统
- 从 GitHub Releases 下载
nanomq-0.15.0-windows-amd64.zip
。 - 解压后进入
bin
目录,双击运行nanomq.exe
(默认监听0.0.0.0:1883
)。
3. 源码编译安装
适用于自定义功能或开发环境:
bash
# 安装依赖
sudo apt install build-essential cmake
# 克隆源码
git clone https://github.com/nanomq/nanomq.git
cd nanomq
# 编译
mkdir build && cd build
cmake -G Ninja ..
ninja
# 安装
sudo ninja install
4. Docker 部署
bash
# 拉取镜像
docker pull emqx/nanomq:latest
# 启动容器(映射端口 1883 和配置文件)
docker run -d \
-p 1883:1883 \
-v /path/to/nanomq.conf:/etc/nanomq.conf \
emqx/nanomq:latest
二、配置文件
默认配置文件路径:/etc/nanomq.conf
常用配置项示例:
hocon
# 监听 TCP MQTT
listeners.tcp {
bind = "0.0.0.0:1883"
}
# 启用 WebSocket
listeners.ws {
bind = "0.0.0.0:8083"
}
# 桥接到云端 MQTT 服务
bridges.mqtt.cloud {
server = "mqtts://cloud.example.com:8883"
clientid = "edge-node-001"
username = "admin"
password = "public"
forwards = ["edge/to/cloud/#"]
}
# 启用 TLS 加密
tls {
cert = "/path/to/cert.pem"
key = "/path/to/key.pem"
}
三、服务管理
启动/停止
bash
# 前台启动(调试模式)
nanomq start --conf /etc/nanomq.conf
# 后台守护进程
nanomq start --daemon
# 停止服务
nanomq stop
设为系统服务(Systemd)
创建服务文件 /etc/systemd/system/nanomq.service
:
ini
[Unit]
Description=NanoMQ MQTT Broker
After=network.target
[Service]
ExecStart=/usr/bin/nanomq start --conf /etc/nanomq.conf
Restart=on-failure
[Install]
WantedBy=multi-user.target
启用并启动:
bash
sudo systemctl enable nanomq
sudo systemctl start nanomq
四、测试连接
订阅消息
bash
nanomq_cli sub -t "test/topic" -q 1
发布消息
bash
nanomq_cli pub -t "test/topic" -m "Hello NanoMQ" -q 1
验证桥接
向桥接主题 edge/to/cloud
发布消息,观察云端是否收到。
五、常见问题
1. 端口被占用
修改配置文件中的 bind
端口,或终止占用进程:
bash
sudo lsof -i :1883 # 查看占用进程
kill -9 <PID> # 终止进程
2. TLS 证书错误
确保证书路径正确且权限允许:
bash
chmod 644 /path/to/cert.pem
chmod 600 /path/to/key.pem
3. 桥接连接失败
检查云端 MQTT 服务的地址、端口、用户名和密码是否正确,确保网络可达。
通过以上步骤,您可以快速完成 NanoMQ 的安装、配置与基础验证。如需高级功能(如规则引擎、插件扩展),请参考 官方文档。
配置NanoMQ
以下是 NanoMQ 的详细配置指南,涵盖核心功能模块和实际场景示例:
一、配置文件结构
默认配置文件路径:/etc/nanomq.conf
采用 HOCON 格式 (类 JSON 语法),支持嵌套和注释。
核心模块包括:
- 监听器(Listeners)
- 桥接(Bridges)
- TLS/SSL 加密
- 认证与权限(Authentication)
- 日志(Log)
- 数据持久化(Persistence)
二、核心配置详解
1. 监听器配置
定义 NanoMQ 监听的协议和端口:
hocon
listeners {
# MQTT over TCP(默认端口 1883)
tcp {
bind = "0.0.0.0:1883"
max_connections = 1024 # 最大连接数
}
# WebSocket(端口 8083)
ws {
bind = "0.0.0.0:8083"
}
# MQTT over TLS(端口 8883)
ssl {
bind = "0.0.0.0:8883"
tls {
cert = "/etc/nanomq/cert.pem" # 证书路径
key = "/etc/nanomq/key.pem" # 私钥路径
}
}
}
2. 桥接配置
将边缘数据转发至云端 MQTT 服务:
hocon
bridges {
mqtt {
# 桥接名称(例如云端服务商名称)
aws_iot {
server = "mqtts://your-iot-endpoint.amazonaws.com:8883" # 云端地址
clientid = "edge-device-001" # 客户端 ID
username = "edge-user" # 认证用户名
password = "secret" # 认证密码
clean_start = true # 是否清除会话
keepalive = 60 # 心跳间隔(秒)
# 转发规则:本地主题 -> 云端主题
forwards = [
"sensor/+/temperature -> aws/sensor/+/temp",
"device/status -> aws/device/status"
]
# 订阅云端下发的指令
subscription = [
{
topic = "aws/command/#"
qos = 1
}
]
}
}
}
3. TLS/SSL 加密
启用安全通信:
hocon
tls {
cert = "/path/to/server.crt" # 服务器证书
key = "/path/to/server.key" # 私钥
cacert = "/path/to/ca.crt" # CA 证书(可选)
verify_peer = false # 是否验证客户端证书(双向认证)
fail_if_no_peer_cert = false # 是否拒绝无证书的连接
}
4. 认证与权限
基础认证
hocon
auth {
# 用户名密码认证
user {
username = "admin"
password = "public" # 支持明文或 bcrypt 哈希
}
# 匿名访问控制
allow_anonymous = false # 禁止匿名连接
}
ACL 权限控制
hocon
acl {
# 规则语法:允许/拒绝 用户/IP 发布/订阅 主题
rules = [
"allow user admin pub/sub #", # 管理员拥有全部权限
"allow ip 192.168.1.0/24 sub sensor/#", # 允许子网订阅传感器主题
"deny all sub $SYS/#" # 禁止所有人订阅系统主题
]
}
5. 数据持久化
配置消息存储(防止断电丢失):
hocon
persistence {
enabled = true # 启用持久化
mode = "queue" # 存储模式:队列/内存
max_mqueue_len = 10000 # 最大队列长度
path = "/var/lib/nanomq" # 存储路径
}
6. 日志管理
调整日志级别和输出:
hocon
log {
level = info # 日志级别:debug, info, warn, error
dir = "/var/log/nanomq" # 日志目录
file = "nanomq.log" # 日志文件名
rotation {
size = "10MB" # 单个日志文件大小
count = 5 # 保留的历史日志文件数
}
}
三、高级配置场景
场景1:边缘到云端双向同步
hocon
bridges {
mqtt {
cloud_sync {
server = "mqtts://cloud.example.com:8883"
clientid = "edge-gateway-001"
forwards = ["edge/data/# -> cloud/edge/data/#"]
subscription = ["cloud/command/# -> edge/command/#"]
}
}
}
场景2:HTTP WebHook 集成
hocon
web_hook {
url = "http://localhost:8080/webhook" # 接收端 URL
headers = { "Content-Type" = "application/json" }
rules = [
{
event = "message.publish" # 触发事件(消息发布)
topics = ["sensor/#"] # 匹配主题
}
]
}
场景3:规则引擎(数据过滤)
hocon
rule {
sql = "SELECT payload.temp FROM 'sensor/#' WHERE payload.temp > 50"
actions = ["mqtt://topic/alarm"] # 触发告警主题
}
四、配置验证与重载
1. 语法检查
bash
nanomq check --conf /etc/nanomq.conf
2. 热重载配置
bash
nanomq reload # 不重启服务加载新配置
3. 运行调试模式
bash
nanomq start --conf /etc/nanomq.conf --log-level debug
五、常见问题
1. 配置未生效
- 确保配置文件路径正确,启动时通过
--conf
指定。 - 检查配置项是否拼写错误(如
listener
vslisteners
)。
2. 权限不足
-
日志或数据目录需赋予写入权限:
bashsudo chown -R nanomq:nanomq /var/lib/nanomq /var/log/nanomq
3. 桥接连接不稳定
-
调整
keepalive
和retry_interval
参数:hoconbridges.mqtt.cloud { keepalive = 30 retry_interval = 10s # 重试间隔 }
六、性能调优参数
hocon
system {
num_taskq_threads = 4 # 任务线程数(建议 CPU 核心数)
max_taskq_size = 1024 # 任务队列容量
parallel = 256 # 并行处理数
tcp {
nodelay = true # 禁用 Nagle 算法
send_timeout = "5s" # 发送超时
}
}
通过灵活组合这些配置项,您可以实现从轻量级边缘消息代理到复杂数据路由网关的功能扩展。建议参考 NanoMQ 官方文档 获取最新配置选项说明。
NanoMQ的配置文件
以下是 NanoMQ 配置文件 的详细说明,涵盖核心配置项和实用示例,帮助您快速掌握关键参数的使用方法。
一、配置文件基础
- 默认路径 :
/etc/nanomq.conf
(Linux)或解压目录下的etc/nanomq.conf
(Windows) - 语法格式 :HOCON(Human-Optimized Config Object Notation),支持嵌套结构和注释(
#
开头) - 重载配置 :支持运行时热更新(
nanomq reload
)
二、核心配置模块详解
1. 网络监听(listeners
)
定义 NanoMQ 监听的协议和端口:
hocon
listeners {
# MQTT over TCP(默认端口 1883)
tcp {
bind = "0.0.0.0:1883"
max_connections = 1024 # 最大连接数
backlog = 1024 # 连接队列长度
}
# WebSocket(端口 8083)
ws {
bind = "0.0.0.0:8083"
}
# MQTT over TLS(端口 8883)
ssl {
bind = "0.0.0.0:8883"
tls {
cert = "/path/to/cert.pem" # 证书路径
key = "/path/to/key.pem" # 私钥路径
verify_peer = false # 是否验证客户端证书
}
}
}
2. 跨网络桥接(bridges
)
将数据转发至其他 MQTT 服务(如云端平台):
hocon
bridges {
mqtt {
# 桥接名称(自定义)
cloud_bridge {
server = "mqtts://broker.emqx.io:8883" # 目标地址
clientid = "edge-node-001" # 客户端标识
username = "admin" # 认证信息
password = "public"
keepalive = 60 # 心跳间隔(秒)
clean_start = true # 是否清除会话
proto_ver = 4 # MQTT 协议版本(4=3.1.1,5=5.0)
# 转发规则(本地主题 -> 云端主题)
forwards = [
"sensor/temperature -> cloud/sensor/temp",
"device/status -> cloud/device/status"
]
# 订阅云端下发的指令
subscription = [
{
topic = "cloud/command/#"
qos = 1
}
]
}
}
}
3. 安全认证(auth
)
配置连接认证和权限控制:
hocon
auth {
# 允许匿名访问(生产环境建议关闭)
allow_anonymous = false
# 用户名密码认证列表
users = [
{ username = "admin", password = "public" }
{ username = "client", password = "123456" }
]
# ACL 权限规则
acl {
rules = [
"allow user admin pub/sub #", # 管理员全权限
"allow user client sub sensor/#", # 客户端仅订阅传感器主题
"deny all sub $SYS/#" # 禁止系统主题访问
]
}
}
4. 持久化存储(persistence
)
配置消息持久化策略:
hocon
persistence {
enabled = true # 启用持久化
mode = "queue" # 存储模式:queue(队列)或 memory(内存)
path = "/var/lib/nanomq" # 数据存储路径
max_mqueue_len = 10000 # 最大队列长度
flush_interval = "10s" # 刷盘间隔
}
5. 日志管理(log
)
调整日志输出行为:
hocon
log {
level = "info" # 日志级别:debug | info | warn | error
dir = "/var/log/nanomq" # 日志目录
file = "nanomq.log" # 日志文件名
rotation {
size = "10MB" # 单个文件最大大小
count = 5 # 保留的历史文件数
}
}
三、进阶配置示例
场景1:边缘到云端双向同步
hocon
bridges.mqtt.cloud_sync {
server = "mqtts://iot-cloud.com:8883"
clientid = "gateway-001"
forwards = ["edge/data/# -> cloud/edge/data/#"]
subscription = ["cloud/cmd/# -> edge/cmd/#"]
tls {
cert = "/certs/cloud_cert.pem"
key = "/certs/cloud_key.pem"
}
}
场景2:HTTP 数据转发(WebHook)
hocon
web_hook {
url = "http://192.168.1.100:8080/webhook"
headers = { "Content-Type" = "application/json" }
rules = [
{
event = "message.publish" # 触发事件:客户端发布消息时
topics = ["sensor/#"] # 匹配主题过滤器
}
]
}
场景3:规则引擎过滤数据
hocon
rule {
sql = "SELECT payload.temp, client_id FROM 'sensor/#' WHERE payload.temp > 50"
actions = [
"mqtt://topic/alarm", # 发布到告警主题
"http://api.example.com/alert" # 发送 HTTP 请求
]
}
四、配置验证与调试
-
语法检查:
bashnanomq check --conf /etc/nanomq.conf
-
热重载配置(无需重启服务):
bashnanomq reload
-
调试模式启动:
bashnanomq start --conf /etc/nanomq.conf --log-level debug
五、注意事项
-
路径权限:确保证书、日志和数据目录有读写权限:
bashchown -R nanomq:nanomq /etc/nanomq /var/lib/nanomq /var/log/nanomq
-
端口冲突 :使用
netstat -tunlp | grep 1883
检查端口占用。 -
TLS 证书 :自签名证书需客户端配置 CA 证书,否则需设置
verify_peer = false
。 -
性能调优:根据硬件调整线程数:
hoconsystem { num_taskq_threads = 4 # 建议等于 CPU 核心数 max_taskq_size = 2048 # 任务队列容量 }
通过合理配置这些参数,您可以轻松实现从基础的 MQTT 代理到复杂的边缘数据网关的功能扩展。建议参考 官方配置文档 获取最新配置说明。
docker安装部署NanoMQ
以下是使用 Docker 安装和部署 NanoMQ 的详细指南,涵盖基础操作、自定义配置及常见场景示例:
一、快速启动
1. 拉取官方镜像
bash
docker pull emqx/nanomq:latest
2. 运行基础容器
bash
# 默认监听 1883(MQTT)和 8083(WebSocket)
docker run -d \
--name nanomq \
-p 1883:1883 \ # MQTT TCP 端口
-p 8083:8083 \ # WebSocket 端口
emqx/nanomq:latest
二、自定义配置
1. 挂载配置文件
创建本地配置文件 nanomq.conf
,然后挂载至容器:
bash
docker run -d \
--name nanomq \
-p 1883:1883 \
-v $(pwd)/nanomq.conf:/etc/nanomq/nanomq.conf \ # 挂载配置文件
emqx/nanomq:latest
2. 配置示例文件
nanomq.conf
内容示例:
hocon
listeners.tcp {
bind = "0.0.0.0:1883"
}
bridges.mqtt.cloud {
server = "mqtts://broker.emqx.io:8883"
clientid = "docker-nanomq"
forwards = ["docker/#"]
}
log {
level = "debug" # 容器内日志级别调至调试模式
}
三、持久化数据存储
1. 挂载数据目录
bash
docker run -d \
--name nanomq \
-p 1883:1883 \
-v $(pwd)/nanomq_data:/var/lib/nanomq \ # 持久化存储路径
emqx/nanomq:latest
2. 启用持久化配置
在 nanomq.conf
中添加:
hocon
persistence {
enabled = true
path = "/var/lib/nanomq" # 与挂载目录一致
}
四、启用 TLS 加密
1. 挂载证书文件
bash
docker run -d \
--name nanomq \
-p 8883:8883 \
-v $(pwd)/tls/cert.pem:/etc/nanomq/cert.pem \
-v $(pwd)/tls/key.pem:/etc/nanomq/key.pem \
-v $(pwd)/nanomq.conf:/etc/nanomq/nanomq.conf \
emqx/nanomq:latest
2. 配置 TLS 监听
nanomq.conf
内容:
hocon
listeners.ssl {
bind = "0.0.0.0:8883"
tls {
cert = "/etc/nanomq/cert.pem" # 容器内路径
key = "/etc/nanomq/key.pem"
}
}
五、使用 Docker Compose 部署
创建 docker-compose.yml
:
yaml
version: '3.8'
services:
nanomq:
image: emqx/nanomq:latest
container_name: nanomq
ports:
- "1883:1883"
- "8083:8083"
- "8883:8883"
volumes:
- ./nanomq.conf:/etc/nanomq/nanomq.conf
- ./tls:/etc/nanomq/tls
- ./nanomq_data:/var/lib/nanomq
restart: unless-stopped
启动服务:
bash
docker-compose up -d
六、操作命令
1. 查看日志
bash
docker logs nanomq --tail 100 -f # 实时查看最后100行日志
2. 进入容器终端
bash
docker exec -it nanomq /bin/sh
3. 重启服务
bash
docker restart nanomq
七、高级场景示例
场景1:边缘到云端桥接
hocon
# nanomq.conf
bridges.mqtt.cloud {
server = "mqtts://your-cloud-broker:8883"
clientid = "edge-docker-001"
username = "admin"
password = "public"
forwards = ["sensor/#"]
tls {
cert = "/etc/nanomq/tls/client-cert.pem"
key = "/etc/nanomq/tls/client-key.pem"
}
}
场景2:集成 Redis 缓存
通过环境变量注入 Redis 地址:
bash
docker run -d \
--name nanomq \
-e REDIS_HOST=192.168.1.100 \ # 假设插件需要该变量
emqx/nanomq:latest
八、常见问题
1. 端口冲突
bash
# 检查端口占用
netstat -tunlp | grep 1883
# 修改容器映射端口
docker run -d -p 1884:1883 ... # 主机端口:容器端口
2. 权限不足
确保挂载目录有写入权限:
bash
chmod -R 777 ./nanomq_data # 开发环境临时方案
3. 配置文件未生效
检查容器内路径是否匹配:
bash
docker exec nanomq ls /etc/nanomq/nanomq.conf
九、性能调优
在 nanomq.conf
中调整系统参数:
hocon
system {
num_taskq_threads = 4 # 建议等于 CPU 核心数
max_taskq_size = 2048 # 任务队列容量
parallel = 1024 # 并行处理数
}
通过 Docker 部署 NanoMQ 可快速实现边缘 MQTT 服务的容器化,结合挂载配置和数据卷,既能保持轻量化,又能满足生产级稳定性需求。如需更多定制,请参考 NanoMQ Docker 文档。
docker-compose安装部署NanoMQ
以下是使用 docker-compose 部署 NanoMQ 的完整指南,包含基础配置、自定义扩展和实用场景示例:
一、基础部署
1. 创建项目目录
bash
mkdir nanomq-docker && cd nanomq-docker
mkdir -p {conf,data,tls} # 配置文件、数据持久化、证书目录
2. 编写 docker-compose.yml
yaml
version: '3.8'
services:
nanomq:
image: emqx/nanomq:latest # 使用官方镜像
container_name: nanomq
restart: unless-stopped # 异常退出自动重启
ports:
- "1883:1883" # MQTT TCP
- "8083:8083" # WebSocket
- "8883:8883" # MQTT over TLS
volumes:
- ./conf/nanomq.conf:/etc/nanomq/nanomq.conf # 挂载配置文件
- ./data:/var/lib/nanomq # 持久化数据目录
- ./tls:/etc/nanomq/tls # TLS证书目录
networks:
- mqtt_net
networks:
mqtt_net: # 创建专用网络(可选)
driver: bridge
3. 配置文件示例
创建 conf/nanomq.conf
:
hocon
listeners {
tcp {
bind = "0.0.0.0:1883"
}
ws {
bind = "0.0.0.0:8083"
}
ssl {
bind = "0.0.0.0:8883"
tls {
cert = "/etc/nanomq/tls/server-cert.pem"
key = "/etc/nanomq/tls/server-key.pem"
}
}
}
persistence {
enabled = true
path = "/var/lib/nanomq"
}
4. 启动服务
bash
docker-compose up -d # 后台运行
docker-compose logs -f # 查看实时日志
二、进阶配置场景
场景1:桥接云端 MQTT 服务
修改 conf/nanomq.conf
添加桥接配置:
hocon
bridges.mqtt.cloud {
server = "mqtts://broker.emqx.io:8883"
clientid = "docker-nanomq"
username = "admin"
password = "public"
forwards = ["edge/# -> cloud/edge/#"]
tls {
cert = "/etc/nanomq/tls/client-cert.pem" # 客户端证书
key = "/etc/nanomq/tls/client-key.pem"
}
}
场景2:启用 WebHook 集成
hocon
web_hook {
url = "http://webhook-server:8080/callback"
headers = { "X-Auth-Token" = "your_token" }
rules = [
{
event = "message.publish"
topics = ["sensor/#"]
}
]
}
三、TLS 证书配置
1. 生成自签名证书(示例)
bash
# 生成 CA 证书
openssl req -x509 -newkey rsa:4096 -days 365 -nodes \
-keyout tls/ca-key.pem -out tls/ca-cert.pem \
-subj "/CN=Nanomq CA"
# 生成服务器证书
openssl req -newkey rsa:4096 -nodes \
-keyout tls/server-key.pem -out tls/server-req.pem \
-subj "/CN=nanomq-server"
openssl x509 -req -in tls/server-req.pem -days 60 \
-CA tls/ca-cert.pem -CAkey tls/ca-key.pem -CAcreateserial \
-out tls/server-cert.pem
2. 证书目录结构
tls/
├── ca-cert.pem # CA 证书
├── server-cert.pem # 服务器证书
└── server-key.pem # 服务器私钥
四、操作命令集
功能 | 命令 |
---|---|
启动服务 | docker-compose up -d |
停止服务 | docker-compose down |
查看日志 | docker-compose logs -f |
进入容器终端 | docker-compose exec nanomq sh |
热重载配置 | docker-compose exec nanomq nanomq reload |
扩容节点 | docker-compose scale nanomq=3 (需集群支持) |
五、完整 docker-compose.yml
示例
yaml
version: '3.8'
services:
nanomq:
image: emqx/nanomq:0.15.0 # 指定版本
container_name: nanomq
ports:
- "1883:1883"
- "8083:8083"
- "8883:8883"
volumes:
- ./conf/nanomq.conf:/etc/nanomq/nanomq.conf
- ./data:/var/lib/nanomq
- ./tls:/etc/nanomq/tls
environment:
- NANOMQ_LOG_LEVEL=debug # 环境变量覆盖日志级别
networks:
- mqtt_net
# 可选:搭配 MQTT 客户端测试服务
mqtt-client:
image: eclipse-mosquitto:latest
command: sh -c "sleep 10 && mosquitto_sub -h nanomq -t test"
depends_on:
- nanomq
networks:
- mqtt_net
networks:
mqtt_net:
driver: bridge
六、常见问题排查
1. 证书权限错误
bash
# 设置证书目录权限
chmod 644 tls/*.pem
chmod 600 tls/*-key.pem
2. 桥接连接失败
bash
# 进入容器测试网络连通性
docker-compose exec nanomq ping broker.emqx.io
docker-compose exec nanomq openssl s_client -connect broker.emqx.io:8883
3. 配置热重载无效
hocon
# 确保配置文件中启用动态加载
system {
allow_reload = true # 默认已启用
}
七、生产环境建议
-
资源限制 - 添加 CPU/内存约束:
yamldeploy: resources: limits: cpus: '2' memory: 512M
-
日志轮转 - 避免容器日志膨胀:
yamllogging: driver: "json-file" options: max-size: "10m" max-file: "5"
-
健康检查 - 添加容器健康监测:
yamlhealthcheck: test: ["CMD", "nanomq", "ping"] interval: 30s timeout: 10s retries: 3
通过以上配置,您可以快速搭建一个高可用、安全的 MQTT 边缘消息枢纽。根据实际需求扩展桥接规则、安全策略和集成组件,实现完整的物联网数据管道。
k8s安装部署NanoMQ
以下是 Kubernetes (k8s) 上部署 NanoMQ 的完整指南,包含集群化部署、持久化存储和监控集成方案:
一、部署架构设计
- Deployment :无状态代理(默认)或 StatefulSet(需持久化)
- Service :通过
NodePort
/LoadBalancer
暴露 MQTT 端口 - ConfigMap :管理
nanomq.conf
配置文件 - PersistentVolume:持久化消息队列数据(可选)
- Monitoring:集成 Prometheus + Grafana
二、部署步骤
1. 创建 Namespace
yaml
# nanomq-namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
name: nanomq
2. 创建 ConfigMap
yaml
# nanomq-configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: nanomq-config
namespace: nanomq
data:
nanomq.conf: |
listeners.tcp {
bind = "0.0.0.0:1883"
}
persistence {
enabled = true
path = "/var/lib/nanomq"
}
3. 创建 Deployment
yaml
# nanomq-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nanomq
namespace: nanomq
spec:
replicas: 2
selector:
matchLabels:
app: nanomq
template:
metadata:
labels:
app: nanomq
annotations:
prometheus.io/scrape: "true" # 启用监控
spec:
containers:
- name: nanomq
image: emqx/nanomq:0.15.0
ports:
- containerPort: 1883
name: mqtt
volumeMounts:
- name: config-volume
mountPath: /etc/nanomq/nanomq.conf
subPath: nanomq.conf
- name: data
mountPath: /var/lib/nanomq
livenessProbe:
exec:
command: ["nanomq", "ping"]
initialDelaySeconds: 30
readinessProbe:
tcpSocket:
port: 1883
volumes:
- name: config-volume
configMap:
name: nanomq-config
- name: data
emptyDir: {} # 生产环境建议使用 PVC
4. 创建 Service
yaml
# nanomq-service.yaml
apiVersion: v1
kind: Service
metadata:
name: nanomq
namespace: nanomq
spec:
type: LoadBalancer
ports:
- name: mqtt
port: 1883
targetPort: 1883
selector:
app: nanomq
三、高级部署场景
场景1:持久化存储(PVC)
yaml
# nanomq-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nanomq-data
namespace: nanomq
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: standard # 根据集群调整
修改 Deployment 挂载:
yaml
volumes:
- name: data
persistentVolumeClaim:
claimName: nanomq-data
场景2:启用 TLS 加密
yaml
# 在 ConfigMap 中添加 TLS 配置
data:
nanomq.conf: |
listeners.ssl {
bind = "0.0.0.0:8883"
tls {
cert = "/etc/nanomq/tls/server-cert.pem"
key = "/etc/nanomq/tls/server-key.pem"
}
}
# 创建 Secret 存储证书
kubectl create secret tls nanomq-tls \
--cert=server-cert.pem \
--key=server-key.pem \
-n nanomq
# 在 Deployment 中挂载 Secret
volumeMounts:
- name: tls
mountPath: /etc/nanomq/tls
volumes:
- name: tls
secret:
secretName: nanomq-tls
四、监控集成(Prometheus)
1. 启用 NanoMQ Prometheus 插件
在 nanomq.conf
中添加:
hocon
prometheus {
enable = true
port = 9283
}
2. 部署 ServiceMonitor
yaml
# nanomq-servicemonitor.yaml
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: nanomq-monitor
namespace: nanomq
spec:
endpoints:
- port: prometheus
interval: 15s
selector:
matchLabels:
app: nanomq
五、操作命令
bash
# 一键部署
kubectl apply -f nanomq-namespace.yaml
kubectl apply -f nanomq-configmap.yaml
kubectl apply -f nanomq-deployment.yaml
kubectl apply -f nanomq-service.yaml
# 查看状态
kubectl -n nanomq get pods -o wide
kubectl -n nanomq logs -f <pod-name>
# 测试 MQTT 连接
kubectl -n nanomq port-forward svc/nanomq 1883:1883 &
nanomq_cli sub -t "k8s/test" -h localhost
六、生产环境优化
1. 资源配额限制
yaml
resources:
limits:
cpu: "2"
memory: "512Mi"
requests:
cpu: "500m"
memory: "256Mi"
2. 亲和性调度
yaml
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchExpressions:
- key: app
operator: In
values: [nanomq]
topologyKey: kubernetes.io/hostname
七、故障排查
1. Pod 启动失败
bash
kubectl describe pod -n nanomq <pod-name> # 查看事件日志
kubectl logs -n nanomq <pod-name> --previous # 查看前一个容器的日志
2. 网络连通性问题
bash
kubectl -n nanomq run net-tools --image=nicolaka/netshoot -it --rm
curl telnet://nanomq:1883 # 测试集群内访问
通过以上配置,您可以在 Kubernetes 集群中快速部署高可用、可扩展的 NanoMQ 消息服务,满足物联网边缘计算场景下的 MQTT 通信需求。
Windows安装部署NanoMQ
以下是 Windows 系统 上安装和部署 NanoMQ 的详细指南,涵盖从基础安装到高级配置的完整流程:
一、下载与安装
1. 获取二进制包
- 访问 NanoMQ GitHub Releases 页面。
- 下载适用于 Windows 的压缩包(如
nanomq-0.15.0-windows-amd64.zip
)。
2. 解压文件
将压缩包解压到目标目录(如 C:\nanomq
),目录结构如下:
nanomq/
├── bin/
│ ├── nanomq.exe # 主程序
│ └── nanomq_cli.exe # 客户端工具
├── etc/
│ └── nanomq.conf # 配置文件
└── logs/ # 日志目录
3. 配置环境变量(可选)
将 bin
目录加入系统 PATH,以便全局调用:
- 右键点击 此电脑 > 属性 > 高级系统设置 > 环境变量。
- 在 系统变量 中找到
Path
,点击 编辑 ,添加 NanoMQ 的bin
目录路径(如C:\nanomq\bin
)。
二、快速启动
1. 命令行启动
cmd
# 进入 NanoMQ 目录
cd C:\nanomq
# 启动服务(默认加载当前目录的 etc/nanomq.conf)
bin\nanomq.exe start
2. 验证运行
打开浏览器访问 http://localhost:8081
(默认 Web 仪表盘端口),或查看日志文件 logs\nanomq.log
。
三、配置文件
1. 修改配置
编辑 etc\nanomq.conf
(示例配置):
hocon
listeners {
tcp {
bind = "0.0.0.0:1883"
}
ws {
bind = "0.0.0.0:8083"
}
}
# 启用基础认证
auth {
allow_anonymous = false
users = [
{ username = "admin", password = "public" }
]
}
2. 指定配置文件启动
cmd
bin\nanomq.exe start --conf "C:\nanomq\etc\nanomq.conf"
四、作为 Windows 服务运行
1. 使用 NSSM 工具
- 下载 NSSM。
- 解压后,将
nssm.exe
复制到C:\Windows\System32
。
2. 创建服务
cmd
# 以管理员身份运行 CMD
nssm install NanoMQ
# 设置服务参数:
- Path: C:\nanomq\bin\nanomq.exe
- Startup Directory: C:\nanomq
- Arguments: start --conf "C:\nanomq\etc\nanomq.conf"
3. 管理服务
cmd
nssm start NanoMQ # 启动服务
nssm stop NanoMQ # 停止服务
nssm remove NanoMQ # 删除服务
五、启用 TLS 加密
1. 生成证书
使用 OpenSSL 生成自签名证书:
cmd
# 安装 OpenSSL(如通过 Chocolatey)
choco install openssl
# 生成证书
openssl req -x509 -newkey rsa:4096 -nodes -days 365 \
-keyout server-key.pem -out server-cert.pem \
-subj "/CN=localhost"
2. 配置 TLS
修改 nanomq.conf
:
hocon
listeners.ssl {
bind = "0.0.0.0:8883"
tls {
cert = "C:\\nanomq\\certs\\server-cert.pem" # 注意 Windows 路径转义
key = "C:\\nanomq\\certs\\server-key.pem"
}
}
六、测试 MQTT 通信
1. 使用 nanomq_cli
工具
cmd
# 订阅主题(新窗口)
nanomq_cli.exe sub -t "test" -q 1
# 发布消息
nanomq_cli.exe pub -t "test" -m "Hello Windows" -q 1
2. 使用 MQTTX 客户端
- 下载 MQTTX。
- 连接
localhost:1883
,输入用户名密码(如admin/public
)。 - 发布/订阅消息验证功能。
七、常见问题
1. 端口被占用
cmd
# 查找占用端口的进程
netstat -ano | findstr :1883
# 终止进程(替换 <PID>)
taskkill /PID <PID> /F
2. 证书路径错误
- 使用绝对路径,并确保反斜杠转义(如
C:\\nanomq\\certs\\cert.pem
)。 - 检查证书文件权限,确保可读。
3. 缺少 DLL 文件
安装 Visual C++ Redistributable。
八、卸载 NanoMQ
- 停止服务:
nssm stop NanoMQ
。 - 删除服务:
nssm remove NanoMQ
。 - 手动删除安装目录
C:\nanomq
。 - 移除环境变量中的 NanoMQ 路径。
通过以上步骤,您可以在 Windows 系统上快速搭建一个高性能的 MQTT 消息代理,满足边缘计算或本地测试需求。如需更多功能(如规则引擎、数据桥接),请参考 NanoMQ 官方文档。
Ubuntu安装部署NanoMQ
以下是 Ubuntu 系统 上安装和部署 NanoMQ 的完整指南,涵盖多种安装方式和配置场景:
一、安装方法
方法1:通过 APT 仓库安装(推荐)
bash
# 添加 NanoMQ 官方仓库
curl -sSL https://repo.emqx.io/nanomq/install.sh | sudo bash
# 更新软件包列表
sudo apt update
# 安装 NanoMQ
sudo apt install nanomq
# 验证安装
nanomq --version
方法2:通过 Snap 安装
bash
# 安装 Snap(如未安装)
sudo apt install snapd
# 安装 NanoMQ Snap 包
sudo snap install nanomq
方法3:通过源码编译安装
bash
# 安装编译依赖
sudo apt install -y git cmake build-essential
# 克隆源码
git clone https://github.com/nanomq/nanomq.git
cd nanomq
# 编译并安装
mkdir build && cd build
cmake -G Ninja ..
ninja
sudo ninja install
方法4:Docker 安装
bash
# 拉取镜像
sudo docker pull emqx/nanomq:latest
# 运行容器(映射端口和配置)
sudo docker run -d \
-p 1883:1883 \
-v /path/to/nanomq.conf:/etc/nanomq/nanomq.conf \
emqx/nanomq:latest
二、基础配置
1. 修改配置文件
默认路径:/etc/nanomq/nanomq.conf
编辑配置文件(示例配置):
hocon
# 监听 TCP 和 WebSocket
listeners {
tcp {
bind = "0.0.0.0:1883"
max_connections = 1024
}
ws {
bind = "0.0.0.0:8083"
}
}
# 启用基础认证
auth {
allow_anonymous = false
users = [
{ username = "admin", password = "public" }
]
}
2. 启动服务
bash
# 指定配置文件启动
sudo nanomq start --conf /etc/nanomq/nanomq.conf
# 查看运行状态
sudo nanomq_ctl status
三、进阶配置场景
场景1:启用 TLS 加密
-
生成证书:
bashsudo apt install openssl openssl req -x509 -newkey rsa:4096 -nodes -days 365 \ -keyout /etc/nanomq/server-key.pem \ -out /etc/nanomq/server-cert.pem \ -subj "/CN=nanomq-server"
-
配置 TLS:
hoconlisteners.ssl { bind = "0.0.0.0:8883" tls { cert = "/etc/nanomq/server-cert.pem" key = "/etc/nanomq/server-key.pem" } }
场景2:桥接到云端 MQTT 服务
hocon
bridges.mqtt.cloud {
server = "mqtts://broker.emqx.io:8883"
clientid = "ubuntu-edge-001"
username = "admin"
password = "public"
forwards = ["edge/# -> cloud/edge/#"]
}
四、服务管理
1. 使用 Systemd 托管服务
创建服务文件 /etc/systemd/system/nanomq.service
:
ini
[Unit]
Description=NanoMQ MQTT Broker
After=network.target
[Service]
ExecStart=/usr/bin/nanomq start --conf /etc/nanomq/nanomq.conf
Restart=on-failure
User=root
[Install]
WantedBy=multi-user.target
启用并启动服务:
bash
sudo systemctl daemon-reload
sudo systemctl enable nanomq
sudo systemctl start nanomq
2. 常用命令
bash
# 启动/停止/重启
sudo systemctl start nanomq
sudo systemctl stop nanomq
sudo systemctl restart nanomq
# 查看日志
journalctl -u nanomq -f
五、测试连接
1. 使用 nanomq_cli
工具
bash
# 订阅主题
nanomq_cli sub -t "test/ubuntu" -q 1
# 发布消息(新终端)
nanomq_cli pub -t "test/ubuntu" -m "Hello Ubuntu" -q 1
2. 使用 MQTTX 客户端
-
安装 MQTTX:
bashsudo snap install mqttx
-
连接至
mqtt://localhost:1883
,输入用户名密码(如admin/public
)。
六、常见问题
1. 端口冲突
bash
# 检查端口占用
sudo lsof -i :1883
# 终止占用进程(替换 <PID>)
sudo kill -9 <PID>
2. 证书权限错误
bash
sudo chmod 644 /etc/nanomq/server-cert.pem
sudo chmod 600 /etc/nanomq/server-key.pem
3. 配置文件未生效
bash
# 检查配置语法
nanomq check --conf /etc/nanomq/nanomq.conf
# 热重载配置
sudo systemctl restart nanomq
七、卸载 NanoMQ
bash
# APT 安装方式
sudo apt remove nanomq
# 源码编译安装
sudo ninja uninstall # 在源码 build 目录执行
# 清除残留文件
sudo rm -rf /etc/nanomq /var/lib/nanomq
通过以上步骤,您可以在 Ubuntu 系统上快速搭建一个高性能的 MQTT 消息代理,适用于物联网边缘计算、数据采集等场景。如需更多高级功能(规则引擎、集群模式),请参考 NanoMQ 官方文档。
fedora安装部署NanoMQ
以下是 Fedora 系统 上安装和部署 NanoMQ 的详细指南,涵盖多种安装方式和配置场景:
一、安装方法
方法1:通过 RPM 包安装
-
下载 RPM 包
访问 NanoMQ Releases 页面,下载适用于 Fedora 的 RPM 包(如
nanomq-0.15.0-el8.x86_64.rpm
)。 -
安装 RPM 包
bashsudo dnf install ./nanomq-0.15.0-el8.x86_64.rpm
-
验证安装
bashnanomq --version
方法2:通过源码编译安装
-
安装依赖
bashsudo dnf install -y git cmake gcc make openssl-devel
-
克隆源码并编译
bashgit clone https://github.com/nanomq/nanomq.git cd nanomq mkdir build && cd build cmake -G Ninja .. ninja sudo ninja install
方法3:使用 Docker 部署
-
安装 Docker
bashsudo dnf install docker sudo systemctl start docker sudo systemctl enable docker
-
运行 NanoMQ 容器
bashsudo docker run -d \ -p 1883:1883 \ -v /path/to/nanomq.conf:/etc/nanomq/nanomq.conf \ emqx/nanomq:latest
二、基础配置
1. 配置文件路径
-
默认路径 :
/etc/nanomq/nanomq.conf
编辑配置文件(示例配置):hoconlisteners.tcp { bind = "0.0.0.0:1883" max_connections = 1024 } auth { allow_anonymous = false users = [ { username = "admin", password = "public" } ] }
2. 启动服务
bash
# 指定配置文件启动
sudo nanomq start --conf /etc/nanomq/nanomq.conf
# 验证运行状态
sudo nanomq_ctl status
三、进阶配置场景
场景1:启用 TLS 加密
-
生成自签名证书
bashsudo dnf install openssl openssl req -x509 -newkey rsa:4096 -nodes -days 365 \ -keyout /etc/nanomq/server-key.pem \ -out /etc/nanomq/server-cert.pem \ -subj "/CN=nanomq-fedora"
-
配置 TLS 监听
在
nanomq.conf
中添加:hoconlisteners.ssl { bind = "0.0.0.0:8883" tls { cert = "/etc/nanomq/server-cert.pem" key = "/etc/nanomq/server-key.pem" } }
场景2:桥接至云端 MQTT 服务
hocon
bridges.mqtt.cloud {
server = "mqtts://broker.emqx.io:8883"
clientid = "fedora-edge-001"
username = "admin"
password = "public"
forwards = ["fedora/sensor/# -> cloud/sensor/#"]
}
四、服务管理
1. 使用 Systemd 托管服务
创建服务文件 /etc/systemd/system/nanomq.service
:
ini
[Unit]
Description=NanoMQ MQTT Broker
After=network.target
[Service]
ExecStart=/usr/bin/nanomq start --conf /etc/nanomq/nanomq.conf
Restart=on-failure
User=root
[Install]
WantedBy=multi-user.target
启用并启动服务:
bash
sudo systemctl daemon-reload
sudo systemctl enable nanomq
sudo systemctl start nanomq
2. 常用命令
bash
# 启动/停止/重启
sudo systemctl start nanomq
sudo systemctl stop nanomq
sudo systemctl restart nanomq
# 查看日志
journalctl -u nanomq -f
五、防火墙配置
开放 MQTT 端口:
bash
sudo firewall-cmd --permanent --add-port=1883/tcp
sudo firewall-cmd --reload
六、测试连接
1. 使用 nanomq_cli
工具
bash
# 订阅主题
nanomq_cli sub -t "fedora/test" -q 1
# 发布消息(新终端)
nanomq_cli pub -t "fedora/test" -m "Hello Fedora" -q 1
2. 使用 MQTTX 客户端
-
安装 MQTTX (Snap 方式):
bashsudo dnf install snapd sudo ln -s /var/lib/snapd/snap /snap sudo snap install mqttx
-
连接至
mqtt://localhost:1883
,使用用户名admin
和密码public
。
七、常见问题
1. 端口冲突
bash
# 查找占用端口的进程
sudo ss -tulnp | grep :1883
# 终止进程(替换 <PID>)
sudo kill -9 <PID>
2. SELinux 权限问题
临时禁用 SELinux(仅用于测试):
bash
sudo setenforce 0
或添加策略规则:
bash
sudo ausearch -c 'nanomq' --raw | audit2allow -M my-nanomq
sudo semodule -i my-nanomq.pp
3. 证书路径错误
确保证书路径正确且权限开放:
bash
sudo chmod 644 /etc/nanomq/server-cert.pem
sudo chmod 600 /etc/nanomq/server-key.pem
八、卸载 NanoMQ
RPM 包安装方式
bash
sudo dnf remove nanomq
sudo rm -rf /etc/nanomq /var/lib/nanomq
源码编译安装方式
bash
# 在源码 build 目录执行
sudo ninja uninstall
通过以上步骤,您可以在 Fedora 系统上快速部署一个高性能的 MQTT 代理,适用于物联网边缘计算或本地开发测试。如需更多高级功能(如规则引擎、集群模式),请参考 NanoMQ 官方文档。
NanoMQ 对比 EMQX , mosquitto
以下是 NanoMQ 、EMQX 和 Mosquitto 三款主流 MQTT Broker 的对比分析,涵盖架构设计、性能、功能特性、适用场景及社区生态等方面:
1. 架构设计与性能
特性 | NanoMQ | EMQX | Mosquitto |
---|---|---|---|
架构 | 基于 NNG 的异步 I/O 多线程模型,支持 Actor 线程模型,充分利用多核 CPU | 分布式架构,基于 Erlang/OTP,支持 masterless 集群和高可用性 | 单线程设计,依赖 epoll 实现高效事件循环 |
性能 | 高吞吐(10 倍于 Mosquitto)、低延迟,支持边缘端多协议转换 | 企业级高性能,支持百万级并发连接,低延迟 | 轻量级,低资源占用(内存 <1MB),但扩展性有限(<10 万连接) |
资源占用 | 约 2MB 内存启动,适合资源受限的边缘设备 | 约 50MB 内存启动,适合云端和资源丰富的场景 | 内存占用最低(<1MB),适合嵌入式设备 |
2. 功能特性
特性 | NanoMQ | EMQX | Mosquitto |
---|---|---|---|
协议支持 | MQTT 3.1.1/5.0、MQTT over QUIC、WebSocket、DDS/NNG/ZeroMQ 协议桥接 | MQTT 3.1.1/5.0、MQTT-SN、MQTT over QUIC、CoAP 等 | MQTT 3.1.1/5.0、WebSocket、TLS/SSL |
扩展功能 | 规则引擎、HTTP API、WebHook、消息持久化(SQLite/MySQL) | 企业级功能:数据集成(Kafka、数据库)、集群、双向 SSL、商业支持 | 基础功能完善,但缺乏高级管理功能(如 Dashboard) |
安全特性 | TLS/SSL、用户名密码认证、ACL 权限控制 | 多层级安全机制(LDAP、JWT、双向 TLS)、企业级认证集成 | TLS/SSL、基础 ACL 支持 |
3. 适用场景
场景 | NanoMQ | EMQX | Mosquitto |
---|---|---|---|
边缘计算 | 工业物联网边缘网关、机器人、车联网(支持多协议转换) | 云端大规模数据聚合、车联网平台、智慧城市 | 低功耗传感器、嵌入式设备、小型工业网关 |
扩展性需求 | 单节点高性能,支持 QUIC 桥接至云端 | 分布式集群,支持水平扩展和高可用性 | 单节点部署,无集群支持 |
开发复杂度 | 配置灵活,适合有经验的开发者 | 安装配置复杂,需专业运维 | 配置简单,适合快速部署 |
4. 社区与生态
维度 | NanoMQ | EMQX | Mosquitto |
---|---|---|---|
社区活跃度 | 新兴项目(2020 年启动),代码提交频繁,发展势头强劲 | 最活跃(GitHub 11.5k Stars),企业级支持完善 | 成熟稳定(GitHub 7.2k Stars),社区支持广泛 |
开源协议 | MIT 许可证 | Apache License 2.0 | EPL/EDL 许可证 |
文档与工具 | 提供 CLI 工具和性能测试模块 | 文档详尽,提供商业版和云服务(EMQX Cloud) | 文档完善,配套 mosquitto_pub/sub 命令行工具 |
5. 核心优势与局限性
-
NanoMQ
- 优势:轻量高性能、多协议桥接、QUIC 支持,适合边缘复杂场景。
- 局限:不支持集群,社区生态尚在发展中。
-
EMQX
- 优势:分布式架构、企业级功能、高扩展性,适合云端大规模部署。
- 局限:资源消耗较高,学习成本较高。
-
Mosquitto
- 优势:极简设计、低资源占用,适合嵌入式设备和快速验证场景。
- 局限:单线程架构限制扩展性,缺乏高级功能。
总结与选型建议
- 边缘计算与高性能需求 :选择 NanoMQ,尤其需要多协议转换或 QUIC 支持时。
- 企业级云端部署 :选择 EMQX,适用于高并发、高可用性和复杂集成的场景。
- 嵌入式设备与快速验证 :选择 Mosquitto,适合资源受限环境和简单消息代理需求。
三者可协同使用(如边缘用 NanoMQ,云端用 EMQX),构建统一的物联网数据管道。如需进一步测试,可使用 MQTTX 或 NanoMQ CLI 工具进行验证。
WebSocker 连接 NanoMQ
以下是 通过 WebSocket 连接 NanoMQ 的完整指南,包含服务端配置、客户端连接方法和常见问题排查:
一、NanoMQ 服务端配置
1. 启用 WebSocket 监听器
编辑 NanoMQ 配置文件(默认路径 /etc/nanomq/nanomq.conf
):
hocon
listeners {
ws {
bind = "0.0.0.0:8083" # WebSocket 默认端口
path = "/mqtt" # WebSocket 路径(可选)
max_connections = 1024 # 最大连接数
}
}
2. 启用 WebSocket over TLS (WSS)
hocon
listeners.wss {
bind = "0.0.0.0:8084"
tls {
cert = "/path/to/server-cert.pem" # 证书路径
key = "/path/to/server-key.pem" # 私钥路径
}
}
3. 重启服务使配置生效
bash
nanomq stop && nanomq start --conf /etc/nanomq/nanomq.conf
二、客户端连接方法
1. JavaScript 客户端(浏览器)
使用 MQTT.js 库:
javascript
const mqtt = require('mqtt');
// 连接参数
const client = mqtt.connect('ws://your-nanomq-ip:8083/mqtt', {
username: 'admin', // 认证信息(若启用)
password: 'public',
clientId: 'web-client-' + Math.random().toString(16).substr(2, 8)
});
// 订阅主题
client.on('connect', () => {
client.subscribe('web/data', (err) => {
if (!err) client.publish('web/data', 'Hello from Browser!');
});
});
// 接收消息
client.on('message', (topic, message) => {
console.log(`Received: ${message.toString()} on ${topic}`);
});
2. 使用 MQTTX 工具
- 下载 MQTTX 客户端。
- 新建连接,选择 WebSocket 协议:
- Host :
ws://your-nanomq-ip:8083
- Path :
/mqtt
(与配置一致) - Client ID : 自定义(如
mqttx-web-client
) - 填写认证信息(若启用)
- Host :
三、高级配置场景
场景1:跨域访问支持
在配置文件中添加 HTTP 服务配置:
hocon
http_server {
port = 8080
allow_cors = true # 启用跨域支持
cors_headers = "*" # 允许所有域名
}
场景2:调整 WebSocket 消息大小限制
hocon
listeners.ws {
bind = "0.0.0.0:8083"
max_packet_size = "1MB" # 最大消息大小(默认 1MB)
}
四、连接验证
1. 检查 WebSocket 端口监听
bash
netstat -tuln | grep 8083
# 预期输出:LISTEN 0 1024 0.0.0.0:8083
2. 使用在线工具测试
访问 WebSocket 在线测试工具,输入地址:
ws://your-nanomq-ip:8083/mqtt
五、常见问题排查
1. 连接被拒绝
-
检查防火墙 :
bashsudo ufw allow 8083/tcp # Ubuntu/Debian sudo firewall-cmd --add-port=8083/tcp --permanent # CentOS/Fedora
-
验证服务日志 :
bashtail -f /var/log/nanomq/nanomq.log | grep "WebSocket"
2. WebSocket 握手失败
-
路径不匹配 :确保客户端连接的路径与配置中的
path
一致。 -
协议头错误 :客户端需发送标准的 WebSocket 协议头,附加 MQTT 子协议:
httpSec-WebSocket-Protocol: mqtt
3. 消息丢失或延迟
-
调整 QoS 等级 :在客户端发布消息时指定 QoS(如 QoS 1):
javascriptclient.publish('topic', 'message', { qos: 1 });
-
检查网络带宽:WebSocket 长连接对网络稳定性要求较高。
六、性能优化建议
-
启用压缩(若传输 JSON/文本):
hoconlisteners.ws { bind = "0.0.0.0:8083" compress = true # 启用 permessage-deflate 压缩 }
-
调整线程池大小:
hoconsystem { num_taskq_threads = 4 # 建议等于 CPU 核心数 }
通过以上步骤,您可以快速实现浏览器、移动端或其他 WebSocket 客户端与 NanoMQ 的高效通信,适用于实时监控、即时聊天等场景。如需更多高级功能(如规则引擎处理 WebSocket 数据),请参考 NanoMQ 文档。