引言
MQTT 是一種輕量級、基于發布/訂閱模式的消息傳輸協議,旨在用極小的代碼空間和網絡帶寬為物聯網設備提供簡單、可靠的消息傳遞服務。MQTT 經過多年的發展,如今已被廣泛應用于資源開采、工業制造、移動通信、智能汽車等各行各業,使得 MQTT 成為了物聯網傳輸協議的事實標準。
出于穩定性、可靠性、成本等多方面的考慮,眾多 MQTT 服務實現更傾向于選擇擁有豐富開源生態系統的 Linux 環境,Windows 平臺上可選的 MQTT 服務相對有限。NanoMQ 是用于物聯網邊緣的超輕量級 MQTT 消息服務器,具有極高的性能性價比,適用于各類邊緣計算平臺。NanoMQ 有著強大的跨平臺和可兼容能力,不僅可以用于以 Linux 為基礎的各類平臺,也為 Windows 平臺提供了 MQTT 服務的新選擇。
本文將以 NanoMQ 為例,使用二進制包和源代碼編譯兩種方式演示如何在 Windows 平臺中快速搭建 MQTT 服務。
NanoMQ 簡介
NanoMQ 是 EMQ 于 2021 年發布的開源項目,旨在為物聯網邊緣場景提供輕量級、快速、支持多線程的 MQTT 消息服務器和消息總線。NanoMQ 基于 NNG 的異步 I/O 構建,內置 Actor 多線程模型。相較于 Mosquitto 的單線程設計,NanoMQ 能夠充分發揮現代 SMP 系統的多核優勢,在邊緣多核環境中展現出了比 Mosquitto 高達 10 倍的性能表現。NanoMQ 基于標準 POSIX 接口開發,可以輕松通過 MinGW 的 POSIX 編譯環境移植到各類 Windows 環境中。經過三年研發迭代,NanoMQ 于 2024 年 1 月正式加入 LF Edge 基金會,未來將與 LF Edge 旗下的 EdgeX Foundry 框架深度集成,共同促進物聯網邊緣設備和應用之間的互操作性。
NanoMQ 主要具有以下特性:
- 超輕量化:安裝包約 200KB 左右,運行占用資源極小。根據編譯和啟動的配置,啟動所需內存資源從300Kb 到 3Mb 不等。
- 兼容性和可移植性:NanoMQ 采用純凈的 C/C++ 開發,只依賴于標準 POSIX API,同時支持大小端兼容,可無縫對接各類網絡應用,零成本遷移到各類嵌入式平臺。
- 可伸縮性:借助內置的異步 IO 架構和多線程模型,NanoMQ 在保持輕量化的同時仍具備一定可橫向拓展的并發吞吐能力。僅需不到 10MB 的內存消耗,即可支持超過 10W 的消息吞吐。
- SMP 支持:NanoMQ 在邊緣多核平臺上對 SMP 有著良好的支持,能夠充分發揮多處理器的能力,從而提升系統性能。
- 容器支持:NanoMQ 能夠輕松地通過容器進行部署和運行,并且與主流的邊緣容器編排方案兼容,使得部署過程更加靈活和便捷。
二進制包安裝
首先進入 NanoMQ 官網下載頁面,選擇 Windows 平臺下載安裝包:
可以在解壓后文件夾中的bin
目錄下用 Windows 命令行使用 NanoMQ。將解壓后的 C:\xxx\nanomq-0.21.10-windows-x86_64\bin
目錄添加到環境變量中,則可以在 Windows 命令行或者 PowerShell 中直接使用 NanoMQ。輸入 nanomq --help
可以看到簡要的使用說明。
使用 nanomq start --conf C:\nanomq\config\nanomq.conf
啟動 NanoMQ。其中 C:\nanomq\config\nanomq.conf
為 NanoMQ 配置文件的地址,配置文件示例可以在解壓后文件夾中的 config
目錄下找到。NanoMQ 的詳細配置說明請參見官方文檔。
接下來使用 NanoMQ 的 MQTT 客戶端工具 nanomq_cli
來進行 NanoMQ 的使用說明。nanomq_cli
同樣可以在 bin
目錄下找到。
從上圖中可以看到 nanomq_cli
的通過 sub
命令訂閱了主題 nmqtest
,接收到了 nanomq_cli
通過 pub
命令發布的 HelloWorld
消息。
源碼編譯與運行
在 Windows 平臺編譯需要提前準備 MinGW-w64、Make 和 CMake。
- MinGW-w64 是將 GCC 編譯器和 GNU Binutils 移植到 Windows 平臺下的產物,包括一系列頭文件(Win32API)、庫和可執行文件,是一個在 Windows 平臺上開發和運行原生 Windows 應用程序的開源軟件開發環境。Cygwin 同 MinGW 類似,也用于移植 Unix 軟件到 Windows,但它們采用截然不同的實現。Cygwin 重視兼容性優先于性能,MinGW 則著重于簡化與性能。本文將以 MinGW 為例進行 NanoMQ 的編譯。
- Make 和 CMake 則是用于 NanoMQ 項目自動化構建的工具。參考下載地址:MingGW-w64,Make,CMake。其中 MinGW-w64 應盡量選擇較新版本。
接下來在 Windows 命令行、PowerShell 或者 Git Bash 中輸入以下命令:
# 1. clone 源碼 (已通過ZIP下載源代碼則不需要這一步)
PS: D:\Project> git clone https://github.com/nanomq/nanomq.git
PS: D:\Project> cd nanomq# 2. 更新和初始化 git 子模塊
PS: D:\Project\nanomq> git submodule update --init --recursive# 3. 創建并進入 build 目錄
PS: D:\Project\nanomq> mkdir build
PS: D:\Project\nanomq> cd build# 4. 編譯 NanoMQ
PS: D:\Project\nanomq\build> cmake -G "MinGW Makefiles" ..
PS: D:\Project\nanomq\build> make -j 8# 5. 運行 NanoMQ
PS: D:\Project\nanomq\build> .\nanomq\nanomq.exe broker start
除了 NanoMQ 自帶的客戶端工具,還可以使用開源 MQTT 客戶端工具 MQTTX 來進行消息收發測試。
從上圖中同樣可以看到,訂閱了 nmqtest
主題的客戶端通過 NanoMQ 收到了另一個客戶端發布的 hello
消息。
結語
本文通過二進制包和源碼編譯的方式完成了 NanoMQ 在 Windows 平臺的安裝,并對其使用進行了演示測試。NanoMQ 為在 Windows 平臺上構建物聯網邊緣計算應用提供了一個便捷而強大的選擇。它的輕量級、高性能以及專注于邊緣計算的設計使其成為一個理想的消息傳輸解決方案。