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

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

    bash 复制代码
    nanomq start --conf /etc/nanomq.conf
  3. 测试通信

    • 订阅主题:

      bash 复制代码
      nanomq_cli sub -t "sensor/data" -q 1
    • 发布消息:

      bash 复制代码
      nanomq_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 + 扩展
适用场景 边缘计算 轻量级通用代理 企业级云端部署

七、社区与资源


总结

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 系统
  1. GitHub Releases 下载 nanomq-0.15.0-windows-amd64.zip
  2. 解压后进入 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 vs listeners)。
2. 权限不足
  • 日志或数据目录需赋予写入权限:

    bash 复制代码
    sudo chown -R nanomq:nanomq /var/lib/nanomq /var/log/nanomq
3. 桥接连接不稳定
  • 调整 keepaliveretry_interval 参数:

    hocon 复制代码
    bridges.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 请求
  ]
}

四、配置验证与调试

  1. 语法检查

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

    bash 复制代码
    nanomq reload
  3. 调试模式启动

    bash 复制代码
    nanomq start --conf /etc/nanomq.conf --log-level debug

五、注意事项

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

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

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

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

    hocon 复制代码
    system {
      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  # 默认已启用
}

七、生产环境建议

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

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

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

    yaml 复制代码
    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
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. 获取二进制包
  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. 命令行启动
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 工具
  1. 下载 NSSM
  2. 解压后,将 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 客户端
  1. 下载 MQTTX
  2. 连接 localhost:1883,输入用户名密码(如 admin/public)。
  3. 发布/订阅消息验证功能。

七、常见问题

1. 端口被占用
cmd 复制代码
# 查找占用端口的进程
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 仓库安装(推荐)
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 加密
  1. 生成证书

    bash 复制代码
    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

    hocon 复制代码
    listeners.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 客户端
  1. 安装 MQTTX:

    bash 复制代码
    sudo snap install mqttx
  2. 连接至 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 包安装
  1. 下载 RPM 包

    访问 NanoMQ Releases 页面,下载适用于 Fedora 的 RPM 包(如 nanomq-0.15.0-el8.x86_64.rpm)。

  2. 安装 RPM 包

    bash 复制代码
    sudo dnf install ./nanomq-0.15.0-el8.x86_64.rpm
  3. 验证安装

    bash 复制代码
    nanomq --version

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

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

    bash 复制代码
    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

    bash 复制代码
    sudo dnf install docker
    sudo systemctl start docker
    sudo systemctl enable docker
  2. 运行 NanoMQ 容器

    bash 复制代码
    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 复制代码
    listeners.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 加密
  1. 生成自签名证书

    bash 复制代码
    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 中添加:

    hocon 复制代码
    listeners.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 客户端
  1. 安装 MQTTX (Snap 方式):

    bash 复制代码
    sudo dnf install snapd
    sudo ln -s /var/lib/snapd/snap /snap
    sudo snap install mqttx
  2. 连接至 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

以下是 NanoMQEMQXMosquitto 三款主流 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

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

总结与选型建议

  1. 边缘计算与高性能需求 :选择 NanoMQ,尤其需要多协议转换或 QUIC 支持时。
  2. 企业级云端部署 :选择 EMQX,适用于高并发、高可用性和复杂集成的场景。
  3. 嵌入式设备与快速验证 :选择 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 工具
  1. 下载 MQTTX 客户端。
  2. 新建连接,选择 WebSocket 协议:
    • Host : ws://your-nanomq-ip:8083
    • Path : /mqtt(与配置一致)
    • Client ID : 自定义(如 mqttx-web-client
    • 填写认证信息(若启用)

三、高级配置场景

场景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. 连接被拒绝
  • 检查防火墙

    bash 复制代码
    sudo ufw allow 8083/tcp  # Ubuntu/Debian
    sudo firewall-cmd --add-port=8083/tcp --permanent  # CentOS/Fedora
  • 验证服务日志

    bash 复制代码
    tail -f /var/log/nanomq/nanomq.log | grep "WebSocket"
2. WebSocket 握手失败
  • 路径不匹配 :确保客户端连接的路径与配置中的 path 一致。

  • 协议头错误 :客户端需发送标准的 WebSocket 协议头,附加 MQTT 子协议:

    http 复制代码
    Sec-WebSocket-Protocol: mqtt
3. 消息丢失或延迟
  • 调整 QoS 等级 :在客户端发布消息时指定 QoS(如 QoS 1):

    javascript 复制代码
    client.publish('topic', 'message', { qos: 1 });
  • 检查网络带宽:WebSocket 长连接对网络稳定性要求较高。


六、性能优化建议

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

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

    hocon 复制代码
    system {
      num_taskq_threads = 4  # 建议等于 CPU 核心数
    }

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




相关推荐
PinkandWhite1 小时前
MySQL复习笔记
数据库·笔记·mysql
肥肠可耐的西西公主1 小时前
前端(AJAX)学习笔记(CLASS 4):进阶
前端·笔记·学习
煲冬瓜的程序猿2 小时前
BGP(三)联盟、反射器
网络·网络协议
Joeysoda2 小时前
JavaEE进阶(2) Spring Web MVC: Session 和 Cookie
java·前端·网络·spring·java-ee
暴躁的小胡!!!2 小时前
Linux权限维持之vim python 扩展后门(五)
linux·运维·服务器·网络·安全
邵奈一3 小时前
git报错:error: RPC failed; curl 16 Error in the HTTP2 framing layer
git·网络协议·rpc
圣圣不爱学习3 小时前
Calico-BGP FullMesh模式与RR模式 Day04
运维·网络
zhgjx-dengkewen3 小时前
华为eNSP:实验 OSPF单区域
运维·网络·华为·智能路由器
风格6543 小时前
DR和BDR的选举规则
网络·智能路由器
交换机路由器测试之路3 小时前
【资料分享】wireshark解析脚本omci.lua文件20250306版本发布(独家分享)
网络协议·测试工具·wireshark·lua·omci