当前位置: 首页 > news >正文

NanoMQ ds笔记250306

NanoMQ多版本下载地址 https://www.emqx.com/zh/downloads/nanomq

NanoMQ官方文档 https://nanomq.io/docs/zh/latest/

NanoMQ 是一个专为物联网边缘计算设计的轻量级、高性能 MQTT 消息代理(Message Broker),由中国的开源物联网公司 EMQ 开发并维护。它专注于在资源受限的边缘设备上提供高效的 MQTT 消息通信能力,同时支持与云端服务的无缝集成。


一、核心特性

  1. 轻量高效

    • 内存占用极低:NanoMQ 采用 C 语言开发,运行时内存占用仅 数百KB,适合嵌入式设备(如树莓派、工业网关)或低功耗边缘计算场景。
    • 高吞吐低延迟:单机支持10万+ QoS 0消息/秒的吞吐量,端到端延迟低至毫秒级,满足实时性要求高的场景。
  2. 协议支持

    • 完整 MQTT 3.1.1/5.0 协议:支持 QoS 0/1/2、保留消息、遗嘱消息等标准功能。
    • 多协议桥接:内置 MQTT-SN、WebSocket、nanomsg 等协议转换,方便与不同设备通信。
    • TLS/SSL 加密:支持 MQTT over TLS,保障数据传输安全。
  3. 灵活扩展

    • 插件机制:通过动态加载插件支持功能扩展(如 CoAP、HTTP 桥接)。
    • 规则引擎:支持 SQL 语法配置消息路由、过滤、存储到数据库(如 MySQL、TDengine)。
  4. 边缘-云协同

    • 云端无缝集成:可一键桥接至 EMQX 企业版或 AWS IoT Core 等云平台,实现边缘数据聚合与云端分析联动。

二、架构设计

NanoMQ 采用 事件驱动模型异步 I/O 设计,最大化利用硬件资源:

  • 多线程模型:分离网络 I/O 与业务处理,避免阻塞。
  • 零拷贝技术:减少内存复制开销,提升吞吐量。
  • 模块化设计:核心服务、协议扩展、插件相互独立,按需裁剪。

三、适用场景

  1. 工业物联网(IIoT)
    在工厂车间部署 NanoMQ,实时收集传感器数据并转发至边缘分析平台。
  2. 智能家居网关
    作为家庭设备的 MQTT 中枢,连接 Zigbee/WiFi 设备并同步至云端。
  3. 车联网(V2X)
    在车载终端运行,处理车辆状态消息并实时上报至云平台。
  4. 边缘 AI 推理
    与边缘 AI 框架(如 TensorFlow Lite)集成,传递实时推理结果。

四、快速入门

  1. 安装

    # 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
    
  2. 启动服务

    nanomq start --conf /etc/nanomq.conf
    
  3. 测试通信

    • 订阅主题:
      nanomq_cli sub -t "sensor/data" -q 1
      
    • 发布消息:
      nanomq_cli pub -t "sensor/data" -m "temperature=25" -q 1
      

五、配置示例

编辑 nanomq.conf 启用 TLS 和 WebSocket:

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"]
}

六、优势与对比

特性NanoMQMosquittoEMQX
内存占用~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
# 下载最新版本(以 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
# 下载 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 架构)
# 下载 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 系统
  1. 从 GitHub Releases 下载 nanomq-0.15.0-windows-amd64.zip
  2. 解压后进入 bin 目录,双击运行 nanomq.exe(默认监听 0.0.0.0:1883)。

3. 源码编译安装

适用于自定义功能或开发环境:

# 安装依赖
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 部署
# 拉取镜像
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
常用配置项示例:

# 监听 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"
}

三、服务管理

启动/停止
# 前台启动(调试模式)
nanomq start --conf /etc/nanomq.conf

# 后台守护进程
nanomq start --daemon

# 停止服务
nanomq stop
设为系统服务(Systemd)

创建服务文件 /etc/systemd/system/nanomq.service

[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

启用并启动:

sudo systemctl enable nanomq
sudo systemctl start nanomq

四、测试连接

订阅消息
nanomq_cli sub -t "test/topic" -q 1
发布消息
nanomq_cli pub -t "test/topic" -m "Hello NanoMQ" -q 1
验证桥接

向桥接主题 edge/to/cloud 发布消息,观察云端是否收到。


五、常见问题

1. 端口被占用

修改配置文件中的 bind 端口,或终止占用进程:

sudo lsof -i :1883  # 查看占用进程
kill -9 <PID>       # 终止进程
2. TLS 证书错误

确保证书路径正确且权限允许:

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 监听的协议和端口:

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 服务:

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 加密

启用安全通信:

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. 认证与权限
基础认证
auth {
  # 用户名密码认证
  user {
    username = "admin"
    password = "public"  # 支持明文或 bcrypt 哈希
  }

  # 匿名访问控制
  allow_anonymous = false  # 禁止匿名连接
}
ACL 权限控制
acl {
  # 规则语法:允许/拒绝 用户/IP 发布/订阅 主题
  rules = [
    "allow user admin pub/sub #",             # 管理员拥有全部权限
    "allow ip 192.168.1.0/24 sub sensor/#",  # 允许子网订阅传感器主题
    "deny all sub $SYS/#"                    # 禁止所有人订阅系统主题
  ]
}

5. 数据持久化

配置消息存储(防止断电丢失):

persistence {
  enabled = true          # 启用持久化
  mode = "queue"          # 存储模式:队列/内存
  max_mqueue_len = 10000  # 最大队列长度
  path = "/var/lib/nanomq" # 存储路径
}

6. 日志管理

调整日志级别和输出:

log {
  level = info           # 日志级别:debug, info, warn, error
  dir = "/var/log/nanomq"  # 日志目录
  file = "nanomq.log"    # 日志文件名
  rotation {
    size = "10MB"        # 单个日志文件大小
    count = 5            # 保留的历史日志文件数
  }
}

三、高级配置场景

场景1:边缘到云端双向同步
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 集成
web_hook {
  url = "http://localhost:8080/webhook"  # 接收端 URL
  headers = { "Content-Type" = "application/json" }
  rules = [
    {
      event = "message.publish"  # 触发事件(消息发布)
      topics = ["sensor/#"]       # 匹配主题
    }
  ]
}
场景3:规则引擎(数据过滤)
rule {
  sql = "SELECT payload.temp FROM 'sensor/#' WHERE payload.temp > 50"
  actions = ["mqtt://topic/alarm"]  # 触发告警主题
}

四、配置验证与重载

1. 语法检查
nanomq check --conf /etc/nanomq.conf
2. 热重载配置
nanomq reload  # 不重启服务加载新配置
3. 运行调试模式
nanomq start --conf /etc/nanomq.conf --log-level debug

五、常见问题

1. 配置未生效
  • 确保配置文件路径正确,启动时通过 --conf 指定。
  • 检查配置项是否拼写错误(如 listener vs listeners)。
2. 权限不足
  • 日志或数据目录需赋予写入权限:
    sudo chown -R nanomq:nanomq /var/lib/nanomq /var/log/nanomq
    
3. 桥接连接不稳定
  • 调整 keepaliveretry_interval 参数:
    bridges.mqtt.cloud {
      keepalive = 30
      retry_interval = 10s  # 重试间隔
    }
    

六、性能调优参数

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 监听的协议和端口:

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 服务(如云端平台):

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

配置连接认证和权限控制:

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

配置消息持久化策略:

persistence {
  enabled = true           # 启用持久化
  mode = "queue"           # 存储模式:queue(队列)或 memory(内存)
  path = "/var/lib/nanomq" # 数据存储路径
  max_mqueue_len = 10000   # 最大队列长度
  flush_interval = "10s"   # 刷盘间隔
}

5. 日志管理(log

调整日志输出行为:

log {
  level = "info"           # 日志级别:debug | info | warn | error
  dir = "/var/log/nanomq"  # 日志目录
  file = "nanomq.log"      # 日志文件名
  rotation {
    size = "10MB"         # 单个文件最大大小
    count = 5             # 保留的历史文件数
  }
}

三、进阶配置示例

场景1:边缘到云端双向同步
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)
web_hook {
  url = "http://192.168.1.100:8080/webhook"
  headers = { "Content-Type" = "application/json" }
  rules = [
    {
      event = "message.publish"  # 触发事件:客户端发布消息时
      topics = ["sensor/#"]      # 匹配主题过滤器
    }
  ]
}
场景3:规则引擎过滤数据
rule {
  sql = "SELECT payload.temp, client_id FROM 'sensor/#' WHERE payload.temp > 50"
  actions = [
    "mqtt://topic/alarm",       # 发布到告警主题
    "http://api.example.com/alert"  # 发送 HTTP 请求
  ]
}

四、配置验证与调试

  1. 语法检查

    nanomq check --conf /etc/nanomq.conf
    
  2. 热重载配置(无需重启服务):

    nanomq reload
    
  3. 调试模式启动

    nanomq start --conf /etc/nanomq.conf --log-level debug
    

五、注意事项

  1. 路径权限:确保证书、日志和数据目录有读写权限:

    chown -R nanomq:nanomq /etc/nanomq /var/lib/nanomq /var/log/nanomq
    
  2. 端口冲突:使用 netstat -tunlp | grep 1883 检查端口占用。

  3. TLS 证书:自签名证书需客户端配置 CA 证书,否则需设置 verify_peer = false

  4. 性能调优:根据硬件调整线程数:

    system {
      num_taskq_threads = 4     # 建议等于 CPU 核心数
      max_taskq_size = 2048     # 任务队列容量
    }
    

通过合理配置这些参数,您可以轻松实现从基础的 MQTT 代理到复杂的边缘数据网关的功能扩展。建议参考 官方配置文档 获取最新配置说明。
















docker安装部署NanoMQ

以下是使用 Docker 安装和部署 NanoMQ 的详细指南,涵盖基础操作、自定义配置及常见场景示例:


一、快速启动

1. 拉取官方镜像
docker pull emqx/nanomq:latest
2. 运行基础容器
# 默认监听 1883(MQTT)和 8083(WebSocket)
docker run -d \
  --name nanomq \
  -p 1883:1883 \          # MQTT TCP 端口
  -p 8083:8083 \          # WebSocket 端口
  emqx/nanomq:latest

二、自定义配置

1. 挂载配置文件

创建本地配置文件 nanomq.conf,然后挂载至容器:

docker run -d \
  --name nanomq \
  -p 1883:1883 \
  -v $(pwd)/nanomq.conf:/etc/nanomq/nanomq.conf \  # 挂载配置文件
  emqx/nanomq:latest
2. 配置示例文件

nanomq.conf 内容示例:

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. 挂载数据目录
docker run -d \
  --name nanomq \
  -p 1883:1883 \
  -v $(pwd)/nanomq_data:/var/lib/nanomq \  # 持久化存储路径
  emqx/nanomq:latest
2. 启用持久化配置

nanomq.conf 中添加:

persistence {
  enabled = true
  path = "/var/lib/nanomq"  # 与挂载目录一致
}

四、启用 TLS 加密

1. 挂载证书文件
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 内容:

listeners.ssl {
  bind = "0.0.0.0:8883"
  tls {
    cert = "/etc/nanomq/cert.pem"  # 容器内路径
    key = "/etc/nanomq/key.pem"
  }
}

五、使用 Docker Compose 部署

创建 docker-compose.yml

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

启动服务:

docker-compose up -d

六、操作命令

1. 查看日志
docker logs nanomq --tail 100 -f  # 实时查看最后100行日志
2. 进入容器终端
docker exec -it nanomq /bin/sh
3. 重启服务
docker restart nanomq

七、高级场景示例

场景1:边缘到云端桥接
# 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 地址:

docker run -d \
  --name nanomq \
  -e REDIS_HOST=192.168.1.100 \  # 假设插件需要该变量
  emqx/nanomq:latest

八、常见问题

1. 端口冲突
# 检查端口占用
netstat -tunlp | grep 1883

# 修改容器映射端口
docker run -d -p 1884:1883 ...  # 主机端口:容器端口
2. 权限不足

确保挂载目录有写入权限:

chmod -R 777 ./nanomq_data  # 开发环境临时方案
3. 配置文件未生效

检查容器内路径是否匹配:

docker exec nanomq ls /etc/nanomq/nanomq.conf

九、性能调优

nanomq.conf 中调整系统参数:

system {
  num_taskq_threads = 4     # 建议等于 CPU 核心数
  max_taskq_size = 2048     # 任务队列容量
  parallel = 1024           # 并行处理数
}

通过 Docker 部署 NanoMQ 可快速实现边缘 MQTT 服务的容器化,结合挂载配置和数据卷,既能保持轻量化,又能满足生产级稳定性需求。如需更多定制,请参考 NanoMQ Docker 文档。
















docker-compose安装部署NanoMQ

以下是使用 docker-compose 部署 NanoMQ 的完整指南,包含基础配置、自定义扩展和实用场景示例:


一、基础部署

1. 创建项目目录
mkdir nanomq-docker && cd nanomq-docker
mkdir -p {conf,data,tls}  # 配置文件、数据持久化、证书目录
2. 编写 docker-compose.yml
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

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. 启动服务
docker-compose up -d  # 后台运行
docker-compose logs -f  # 查看实时日志

二、进阶配置场景

场景1:桥接云端 MQTT 服务

修改 conf/nanomq.conf 添加桥接配置:

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 集成
web_hook {
  url = "http://webhook-server:8080/callback"
  headers = { "X-Auth-Token" = "your_token" }
  rules = [
    {
      event = "message.publish"
      topics = ["sensor/#"]
    }
  ]
}

三、TLS 证书配置

1. 生成自签名证书(示例)
# 生成 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 示例

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. 证书权限错误
# 设置证书目录权限
chmod 644 tls/*.pem
chmod 600 tls/*-key.pem
2. 桥接连接失败
# 进入容器测试网络连通性
docker-compose exec nanomq ping broker.emqx.io
docker-compose exec nanomq openssl s_client -connect broker.emqx.io:8883
3. 配置热重载无效
# 确保配置文件中启用动态加载
system {
  allow_reload = true  # 默认已启用
}

七、生产环境建议

  1. 资源限制 - 添加 CPU/内存约束:

    deploy:
      resources:
        limits:
          cpus: '2'
          memory: 512M
    
  2. 日志轮转 - 避免容器日志膨胀:

    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "5"
    
  3. 健康检查 - 添加容器健康监测:

    healthcheck:
      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
# nanomq-namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: nanomq
2. 创建 ConfigMap
# 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
# 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
# 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)
# nanomq-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nanomq-data
  namespace: nanomq
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
  storageClassName: standard  # 根据集群调整

修改 Deployment 挂载:

volumes:
- name: data
  persistentVolumeClaim:
    claimName: nanomq-data
场景2:启用 TLS 加密
# 在 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 中添加:

prometheus {
  enable = true
  port = 9283
}
2. 部署 ServiceMonitor
# 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

五、操作命令

# 一键部署
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. 资源配额限制
resources:
  limits:
    cpu: "2"
    memory: "512Mi"
  requests:
    cpu: "500m"
    memory: "256Mi"
2. 亲和性调度
affinity:
  podAntiAffinity:
    preferredDuringSchedulingIgnoredDuringExecution:
    - weight: 100
      podAffinityTerm:
        labelSelector:
          matchExpressions:
          - key: app
            operator: In
            values: [nanomq]
        topologyKey: kubernetes.io/hostname

七、故障排查

1. Pod 启动失败
kubectl describe pod -n nanomq <pod-name>  # 查看事件日志
kubectl logs -n nanomq <pod-name> --previous  # 查看前一个容器的日志
2. 网络连通性问题
kubectl -n nanomq run net-tools --image=nicolaka/netshoot -it --rm
curl telnet://nanomq:1883  # 测试集群内访问

通过以上配置,您可以在 Kubernetes 集群中快速部署高可用、可扩展的 NanoMQ 消息服务,满足物联网边缘计算场景下的 MQTT 通信需求。
















Windows安装部署NanoMQ

以下是 Windows 系统 上安装和部署 NanoMQ 的详细指南,涵盖从基础安装到高级配置的完整流程:


一、下载与安装

1. 获取二进制包
  1. 访问 NanoMQ GitHub Releases 页面。
  2. 下载适用于 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,以便全局调用:

  1. 右键点击 此电脑 > 属性 > 高级系统设置 > 环境变量
  2. 系统变量 中找到 Path,点击 编辑,添加 NanoMQ 的 bin 目录路径(如 C:\nanomq\bin)。

二、快速启动

1. 命令行启动
# 进入 NanoMQ 目录
cd C:\nanomq

# 启动服务(默认加载当前目录的 etc/nanomq.conf)
bin\nanomq.exe start
2. 验证运行

打开浏览器访问 http://localhost:8081(默认 Web 仪表盘端口),或查看日志文件 logs\nanomq.log


三、配置文件

1. 修改配置

编辑 etc\nanomq.conf(示例配置):

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. 指定配置文件启动
bin\nanomq.exe start --conf "C:\nanomq\etc\nanomq.conf"

四、作为 Windows 服务运行

1. 使用 NSSM 工具
  1. 下载 NSSM。
  2. 解压后,将 nssm.exe 复制到 C:\Windows\System32
2. 创建服务
# 以管理员身份运行 CMD
nssm install NanoMQ

# 设置服务参数:
- Path: C:\nanomq\bin\nanomq.exe
- Startup Directory: C:\nanomq
- Arguments: start --conf "C:\nanomq\etc\nanomq.conf"
3. 管理服务
nssm start NanoMQ    # 启动服务
nssm stop NanoMQ     # 停止服务
nssm remove NanoMQ   # 删除服务

五、启用 TLS 加密

1. 生成证书

使用 OpenSSL 生成自签名证书:

# 安装 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

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 工具
# 订阅主题(新窗口)
nanomq_cli.exe sub -t "test" -q 1

# 发布消息
nanomq_cli.exe pub -t "test" -m "Hello Windows" -q 1
2. 使用 MQTTX 客户端
  1. 下载 MQTTX。
  2. 连接 localhost:1883,输入用户名密码(如 admin/public)。
  3. 发布/订阅消息验证功能。

七、常见问题

1. 端口被占用
# 查找占用端口的进程
netstat -ano | findstr :1883

# 终止进程(替换 <PID>)
taskkill /PID <PID> /F
2. 证书路径错误
  • 使用绝对路径,并确保反斜杠转义(如 C:\\nanomq\\certs\\cert.pem)。
  • 检查证书文件权限,确保可读。
3. 缺少 DLL 文件

安装 Visual C++ Redistributable。


八、卸载 NanoMQ

  1. 停止服务:nssm stop NanoMQ
  2. 删除服务:nssm remove NanoMQ
  3. 手动删除安装目录 C:\nanomq
  4. 移除环境变量中的 NanoMQ 路径。

通过以上步骤,您可以在 Windows 系统上快速搭建一个高性能的 MQTT 消息代理,满足边缘计算或本地测试需求。如需更多功能(如规则引擎、数据桥接),请参考 NanoMQ 官方文档。
















Ubuntu安装部署NanoMQ

以下是 Ubuntu 系统 上安装和部署 NanoMQ 的完整指南,涵盖多种安装方式和配置场景:


一、安装方法

方法1:通过 APT 仓库安装(推荐)
# 添加 NanoMQ 官方仓库
curl -sSL https://repo.emqx.io/nanomq/install.sh | sudo bash

# 更新软件包列表
sudo apt update

# 安装 NanoMQ
sudo apt install nanomq

# 验证安装
nanomq --version
方法2:通过 Snap 安装
# 安装 Snap(如未安装)
sudo apt install snapd

# 安装 NanoMQ Snap 包
sudo snap install nanomq
方法3:通过源码编译安装
# 安装编译依赖
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 安装
# 拉取镜像
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
编辑配置文件(示例配置):

# 监听 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. 启动服务
# 指定配置文件启动
sudo nanomq start --conf /etc/nanomq/nanomq.conf

# 查看运行状态
sudo nanomq_ctl status

三、进阶配置场景

场景1:启用 TLS 加密
  1. 生成证书

    sudo 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"
    
  2. 配置 TLS

    listeners.ssl {
      bind = "0.0.0.0:8883"
      tls {
        cert = "/etc/nanomq/server-cert.pem"
        key = "/etc/nanomq/server-key.pem"
      }
    }
    
场景2:桥接到云端 MQTT 服务
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

[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

启用并启动服务:

sudo systemctl daemon-reload
sudo systemctl enable nanomq
sudo systemctl start nanomq
2. 常用命令
# 启动/停止/重启
sudo systemctl start nanomq
sudo systemctl stop nanomq
sudo systemctl restart nanomq

# 查看日志
journalctl -u nanomq -f

五、测试连接

1. 使用 nanomq_cli 工具
# 订阅主题
nanomq_cli sub -t "test/ubuntu" -q 1

# 发布消息(新终端)
nanomq_cli pub -t "test/ubuntu" -m "Hello Ubuntu" -q 1
2. 使用 MQTTX 客户端
  1. 安装 MQTTX:
    sudo snap install mqttx
    
  2. 连接至 mqtt://localhost:1883,输入用户名密码(如 admin/public)。

六、常见问题

1. 端口冲突
# 检查端口占用
sudo lsof -i :1883

# 终止占用进程(替换 <PID>)
sudo kill -9 <PID>
2. 证书权限错误
sudo chmod 644 /etc/nanomq/server-cert.pem
sudo chmod 600 /etc/nanomq/server-key.pem
3. 配置文件未生效
# 检查配置语法
nanomq check --conf /etc/nanomq/nanomq.conf

# 热重载配置
sudo systemctl restart nanomq

七、卸载 NanoMQ

# 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 包安装
  1. 下载 RPM 包
    访问 NanoMQ Releases 页面,下载适用于 Fedora 的 RPM 包(如 nanomq-0.15.0-el8.x86_64.rpm)。

  2. 安装 RPM 包

    sudo dnf install ./nanomq-0.15.0-el8.x86_64.rpm
    
  3. 验证安装

    nanomq --version
    

方法2:通过源码编译安装
  1. 安装依赖

    sudo dnf install -y git cmake gcc make openssl-devel
    
  2. 克隆源码并编译

    git clone https://github.com/nanomq/nanomq.git
    cd nanomq
    mkdir build && cd build
    cmake -G Ninja ..
    ninja
    sudo ninja install
    

方法3:使用 Docker 部署
  1. 安装 Docker

    sudo dnf install docker
    sudo systemctl start docker
    sudo systemctl enable docker
    
  2. 运行 NanoMQ 容器

    sudo docker run -d \
      -p 1883:1883 \
      -v /path/to/nanomq.conf:/etc/nanomq/nanomq.conf \
      emqx/nanomq:latest
    

二、基础配置

1. 配置文件路径
  • 默认路径: /etc/nanomq/nanomq.conf
    编辑配置文件(示例配置):
    listeners.tcp {
      bind = "0.0.0.0:1883"
      max_connections = 1024
    }
    
    auth {
      allow_anonymous = false
      users = [
        { username = "admin", password = "public" }
      ]
    }
    
2. 启动服务
# 指定配置文件启动
sudo nanomq start --conf /etc/nanomq/nanomq.conf

# 验证运行状态
sudo nanomq_ctl status

三、进阶配置场景

场景1:启用 TLS 加密
  1. 生成自签名证书

    sudo 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"
    
  2. 配置 TLS 监听
    nanomq.conf 中添加:

    listeners.ssl {
      bind = "0.0.0.0:8883"
      tls {
        cert = "/etc/nanomq/server-cert.pem"
        key = "/etc/nanomq/server-key.pem"
      }
    }
    

场景2:桥接至云端 MQTT 服务
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

[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

启用并启动服务:

sudo systemctl daemon-reload
sudo systemctl enable nanomq
sudo systemctl start nanomq
2. 常用命令
# 启动/停止/重启
sudo systemctl start nanomq
sudo systemctl stop nanomq
sudo systemctl restart nanomq

# 查看日志
journalctl -u nanomq -f

五、防火墙配置

开放 MQTT 端口:

sudo firewall-cmd --permanent --add-port=1883/tcp
sudo firewall-cmd --reload

六、测试连接

1. 使用 nanomq_cli 工具
# 订阅主题
nanomq_cli sub -t "fedora/test" -q 1

# 发布消息(新终端)
nanomq_cli pub -t "fedora/test" -m "Hello Fedora" -q 1
2. 使用 MQTTX 客户端
  1. 安装 MQTTX(Snap 方式):
    sudo dnf install snapd
    sudo ln -s /var/lib/snapd/snap /snap
    sudo snap install mqttx
    
  2. 连接至 mqtt://localhost:1883,使用用户名 admin 和密码 public

七、常见问题

1. 端口冲突
# 查找占用端口的进程
sudo ss -tulnp | grep :1883

# 终止进程(替换 <PID>)
sudo kill -9 <PID>
2. SELinux 权限问题

临时禁用 SELinux(仅用于测试):

sudo setenforce 0

或添加策略规则:

sudo ausearch -c 'nanomq' --raw | audit2allow -M my-nanomq
sudo semodule -i my-nanomq.pp
3. 证书路径错误

确保证书路径正确且权限开放:

sudo chmod 644 /etc/nanomq/server-cert.pem
sudo chmod 600 /etc/nanomq/server-key.pem

八、卸载 NanoMQ

RPM 包安装方式
sudo dnf remove nanomq
sudo rm -rf /etc/nanomq /var/lib/nanomq
源码编译安装方式
# 在源码 build 目录执行
sudo ninja uninstall

通过以上步骤,您可以在 Fedora 系统上快速部署一个高性能的 MQTT 代理,适用于物联网边缘计算或本地开发测试。如需更多高级功能(如规则引擎、集群模式),请参考 NanoMQ 官方文档。
















NanoMQ 对比 EMQX , mosquitto

以下是 NanoMQEMQXMosquitto 三款主流 MQTT Broker 的对比分析,涵盖架构设计、性能、功能特性、适用场景及社区生态等方面:


1. 架构设计与性能

特性NanoMQEMQXMosquitto
架构基于 NNG 的异步 I/O 多线程模型,支持 Actor 线程模型,充分利用多核 CPU分布式架构,基于 Erlang/OTP,支持 masterless 集群和高可用性单线程设计,依赖 epoll 实现高效事件循环
性能高吞吐(10 倍于 Mosquitto)、低延迟,支持边缘端多协议转换企业级高性能,支持百万级并发连接,低延迟轻量级,低资源占用(内存 <1MB),但扩展性有限(<10 万连接)
资源占用约 2MB 内存启动,适合资源受限的边缘设备约 50MB 内存启动,适合云端和资源丰富的场景内存占用最低(<1MB),适合嵌入式设备

2. 功能特性

特性NanoMQEMQXMosquitto
协议支持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. 适用场景

场景NanoMQEMQXMosquitto
边缘计算工业物联网边缘网关、机器人、车联网(支持多协议转换)云端大规模数据聚合、车联网平台、智慧城市低功耗传感器、嵌入式设备、小型工业网关
扩展性需求单节点高性能,支持 QUIC 桥接至云端分布式集群,支持水平扩展和高可用性单节点部署,无集群支持
开发复杂度配置灵活,适合有经验的开发者安装配置复杂,需专业运维配置简单,适合快速部署

4. 社区与生态

维度NanoMQEMQXMosquitto
社区活跃度新兴项目(2020 年启动),代码提交频繁,发展势头强劲最活跃(GitHub 11.5k Stars),企业级支持完善成熟稳定(GitHub 7.2k Stars),社区支持广泛
开源协议MIT 许可证Apache License 2.0EPL/EDL 许可证
文档与工具提供 CLI 工具和性能测试模块文档详尽,提供商业版和云服务(EMQX Cloud)文档完善,配套 mosquitto_pub/sub 命令行工具

5. 核心优势与局限性

  • NanoMQ

    • 优势:轻量高性能、多协议桥接、QUIC 支持,适合边缘复杂场景。
    • 局限:不支持集群,社区生态尚在发展中。
  • EMQX

    • 优势:分布式架构、企业级功能、高扩展性,适合云端大规模部署。
    • 局限:资源消耗较高,学习成本较高。
  • Mosquitto

    • 优势:极简设计、低资源占用,适合嵌入式设备和快速验证场景。
    • 局限:单线程架构限制扩展性,缺乏高级功能。

总结与选型建议

  1. 边缘计算与高性能需求:选择 NanoMQ,尤其需要多协议转换或 QUIC 支持时。
  2. 企业级云端部署:选择 EMQX,适用于高并发、高可用性和复杂集成的场景。
  3. 嵌入式设备与快速验证:选择 Mosquitto,适合资源受限环境和简单消息代理需求。

三者可协同使用(如边缘用 NanoMQ,云端用 EMQX),构建统一的物联网数据管道。如需进一步测试,可使用 MQTTX 或 NanoMQ CLI 工具进行验证。
















WebSocker 连接 NanoMQ

以下是 通过 WebSocket 连接 NanoMQ 的完整指南,包含服务端配置、客户端连接方法和常见问题排查:


一、NanoMQ 服务端配置

1. 启用 WebSocket 监听器

编辑 NanoMQ 配置文件(默认路径 /etc/nanomq/nanomq.conf):

listeners {
  ws {
    bind = "0.0.0.0:8083"    # WebSocket 默认端口
    path = "/mqtt"           # WebSocket 路径(可选)
    max_connections = 1024   # 最大连接数
  }
}
2. 启用 WebSocket over TLS (WSS)
listeners.wss {
  bind = "0.0.0.0:8084"
  tls {
    cert = "/path/to/server-cert.pem"  # 证书路径
    key = "/path/to/server-key.pem"    # 私钥路径
  }
}
3. 重启服务使配置生效
nanomq stop && nanomq start --conf /etc/nanomq/nanomq.conf

二、客户端连接方法

1. JavaScript 客户端(浏览器)

使用 MQTT.js 库:

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 工具
  1. 下载 MQTTX 客户端。
  2. 新建连接,选择 WebSocket 协议:
    • Host: ws://your-nanomq-ip:8083
    • Path: /mqtt(与配置一致)
    • Client ID: 自定义(如 mqttx-web-client
    • 填写认证信息(若启用)

三、高级配置场景

场景1:跨域访问支持

在配置文件中添加 HTTP 服务配置:

http_server {
  port = 8080
  allow_cors = true    # 启用跨域支持
  cors_headers = "*"   # 允许所有域名
}
场景2:调整 WebSocket 消息大小限制
listeners.ws {
  bind = "0.0.0.0:8083"
  max_packet_size = "1MB"  # 最大消息大小(默认 1MB)
}

四、连接验证

1. 检查 WebSocket 端口监听
netstat -tuln | grep 8083
# 预期输出:LISTEN 0 1024 0.0.0.0:8083
2. 使用在线工具测试

访问 WebSocket 在线测试工具,输入地址:

ws://your-nanomq-ip:8083/mqtt

五、常见问题排查

1. 连接被拒绝
  • 检查防火墙
    sudo ufw allow 8083/tcp  # Ubuntu/Debian
    sudo firewall-cmd --add-port=8083/tcp --permanent  # CentOS/Fedora
    
  • 验证服务日志
    tail -f /var/log/nanomq/nanomq.log | grep "WebSocket"
    
2. WebSocket 握手失败
  • 路径不匹配:确保客户端连接的路径与配置中的 path 一致。
  • 协议头错误:客户端需发送标准的 WebSocket 协议头,附加 MQTT 子协议:
    Sec-WebSocket-Protocol: mqtt
    
3. 消息丢失或延迟
  • 调整 QoS 等级:在客户端发布消息时指定 QoS(如 QoS 1):
    client.publish('topic', 'message', { qos: 1 });
    
  • 检查网络带宽:WebSocket 长连接对网络稳定性要求较高。

六、性能优化建议

  1. 启用压缩(若传输 JSON/文本):

    listeners.ws {
      bind = "0.0.0.0:8083"
      compress = true  # 启用 permessage-deflate 压缩
    }
    
  2. 调整线程池大小

    system {
      num_taskq_threads = 4  # 建议等于 CPU 核心数
    }
    

通过以上步骤,您可以快速实现浏览器、移动端或其他 WebSocket 客户端与 NanoMQ 的高效通信,适用于实时监控、即时聊天等场景。如需更多高级功能(如规则引擎处理 WebSocket 数据),请参考 NanoMQ 文档。
















相关文章:

  • Vue进阶之Vue3源码解析(三)
  • 部署RabbitMQ集群详细教程
  • Artec Leo+Ray II 三维扫描仪成功为VR展数字化30吨重设备-沪敖3D
  • dify + ollama + deepseek-r1+ stable-diffusion 构建绘画智能体
  • Pytorch xpu环境配置 Pytorch使用Intel集成显卡
  • 单粒子翻转对FPGA的影响及解决方法
  • windows下安装pipx
  • 【JAVA架构师成长之路】【JVM实战】第2集:生产环境内存飙高排查实战
  • 视频输入设备-V4L2的开发流程简述
  • 交叉编译openssl及curl
  • 【Mac】MacOS系统下常用的开发环境配置2025版
  • 【论文阅读】多模态——LSeg
  • 使用 Elasticsearch 进行集成测试初始化​​数据时的注意事项
  • 9. Flink的性能优化
  • 训练 FLUX LoRA模型安装与部署
  • 高频 SQL 50 题(基础版)| 高级字符串函数 / 正则表达式 / 子句:1667. 修复表中的名字、1527. 患某种疾病的患者、196. 删除重复的电子邮箱、176. 第二高的薪水、...
  • 【UI自动化实现思路第二章】OCR 图片文字识别方法
  • NO2.C++语言基础|C++和Java|常量|重载重写重定义|构造函数|强制转换|指针和引用|野指针和悬空指针|const修饰指针|函数指针(C++)
  • 算法提升第一章:基础算法总结
  • 【JAVA架构师成长之路】【JVM实战】第1集:生产环境CPU飙高排查实战
  • 企业系统管理软件/seo网站推广是什么意思
  • 北京网站建设及推广招聘/简单的网页设计作品
  • dede 百度网站地图/品牌宣传策划方案
  • 西宁网络公司网站建设/seo优化关键词排名优化
  • 17网一起做网店网站/seo培训费用
  • 上饶市建设局培训网站/无货源电商怎么做