首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >轻量级高性能 MQTT 消息服务器 NanoMQ

轻量级高性能 MQTT 消息服务器 NanoMQ

作者头像
Tinywan
发布2025-08-03 14:05:06
发布2025-08-03 14:05:06
1.2K0
举报
文章被收录于专栏:开源技术小栈开源技术小栈

NanoMQ MQTT Broker (NanoMQ) 是一个全方位的边缘消息传递平台,包括一个用于 IoT/IIoT 的超快 MQTT Broker 和一个用于 SDV 的轻量级消息传递总线。是面向物联网边缘计算场景的下一代轻量级高性能MQTT消息服务器。

NanoMQNNG深度合作,NanoMQ基于NNG异步 IO 和多线程模型面向MQTT协议深度优化后诞生。依靠NNG出色的网络 API 设计,NanoMQ自身可以专注于 MQTT 服务器性能和更多的拓展功能。目标为边缘设备和 MEC 提供更好的 SMP 支持和极高的性能性价比。

功能特性

完整支持 MQTT 5.0:完整支持 MQTT 5.0/3.1.1,与所有标准 MQTT 开源 SDK 兼容。

  • MQTT 桥接:内置 MQTT 多云桥接功能,简单配置即可接入各类流行的云服务建立云边通道进行多地数据同步。
  • 规则引擎:内置简单规则引擎可以灵活处理边缘数据。也可以与 eKuiper 集成在边缘进行流式数据分析。
  • 消息持久化:针对物联网复杂网络环境场景设计数据持久化和数据缓存功能,桥接消息可以本地缓存后断网续传。重要数据可以在边缘持久化滚动更新。
  • 丰富的集成 API:提供可拓展的事件驱动型 WebHook 接口和运维友好的 HTTP APIs,帮助减少边缘计算应用开发和集成的成本。
  • 多协议网关:通过协议网关支持 nanomsg/ZeroMQ/Websocket 等常用的消息协议,方便在边缘建立灵活的数据路由拓扑。并提供连接加密和安全保障。
  • MQTT STREAM: 对于同一topic的MQTT消息,可以看做一条数据流,并且这个数据流是可以进行落盘存储以及查询操作的,对于一些网络较差的环境下,为数据的完整性和可靠性提供了解决方案.

核心优势

  • 超轻量:MQTT 服务可以低至 200Kb 的内存占用启动。
  • 全异步 I/O:针对物联网和 MQTT 内建 Actor 编程模型并行化计算负载。
  • 多线程并行:优秀的可拓展性,具有良好的多核 SMP(对称多处理)支持和多线程性能。
  • 高性能:边缘百万级消息处理能力。
  • 跨平台:可无缝移植到任何基于 POSIX 的系统平台。
  • 互操作性:数据透明,拓展接口丰富,易于和各类边缘计算框架集成。

快速上手

本指南将以 Docker 部署为例,演示如何快速上手 NanoMQ。

运行以下命令快速通过 Docker 运行 NanoMQ,分别指定端口 1883、8083 和 8883 用于监听 MQTT、MQTT over WebSockets 和 MQTT over SSL/TLS 流量。

代码语言:javascript
复制
docker run -d --name nanomq -p 1883:1883 -p 8083:8083 -p 8883:8883 emqx/nanomq:latest

客户端连接 NanoMQ

安装客户端

代码语言:javascript
复制
composer require workerman/mqtt

订阅主题 subscribe.php

代码语言:javascript
复制
<?php
/**
 * @desc subscribe.php
 * @author Tinywan(ShaoBo Wan)
 */
declare(strict_types=1);

useWorkerman\Worker;
require_once__DIR__ . '/../../vendor/autoload.php';

$worker = new Worker();
$worker->onWorkerStart = function(){
    $mqtt = new Workerman\Mqtt\Client('mqtt://127.0.0.1:1883');
    $mqtt->onConnect = function($mqtt) {
        $mqtt->subscribe('tinywan');
    };
    $mqtt->onMessage = function($topic, $content){
        echo"订阅主题: {$topic}\n";
        echo"消息内容: {$content}\n";
    };
    $mqtt->connect();
};
Worker::runAll();

命令行运行php subscribe.php start启动。

执行发布消息,命令行区域将出现一条消息,表明该消息已成功发布到 NanoMQ 并被转发到订阅主题。

发布信息 publish.php

代码语言:javascript
复制
<?php
/**
 * @desc publish.php
 * @author Tinywan(ShaoBo Wan)
 */
declare(strict_types=1);


useWorkerman\Worker;

require_once__DIR__ . '/../../vendor/autoload.php';

$worker = new Worker();
$worker->onWorkerStart = function () {
    $mqtt = new Workerman\Mqtt\Client('mqtt://127.0.0.1:1883');
    $mqtt->onConnect = function ($mqtt) {
        $mqtt->publish('tinywan', 'Hi!开源技术小栈 NanoMQ');
    };
    $mqtt->connect();
};
Worker::runAll();

命令行运行php publish.php start启动。

其他

IoT 时代数据是第一生产力,而边缘则是数据诞生的地方。在边缘复杂的网络环境中对数据进行快速汇聚分发,一个高实时、高吞吐的边缘消息总线至关重要。然而由于产业链条长和各垂直行业的历史原因,使得边缘存在协议碎片化和多种消息模式,而且嵌入式环境的算力和功耗也有严格限制。

这些问题都对边缘消息总线提出了新的要求与挑战。NanoMQ致力于解决这些问题,提供一个能够在边缘端统一数据流动的轻量级高性能消息总线。同时提供极佳的拓展性和可移植性,适配各类嵌入式平台。让分散在边缘的碎片数据能够被轻松管理和获取。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-08-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 开源技术小栈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 功能特性
  • 核心优势
  • 快速上手
  • 客户端连接 NanoMQ
  • 发布信息 publish.php
  • 其他
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档