在 Windows 平臺搭建 MQTT 服務

引言

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

NanoMQ 主要具有以下特性:

  • 超輕量化:安裝包約 200KB 左右,運行占用資源極小。根據編譯和啟動的配置,啟動所需內存資源從300Kb 到 3Mb 不等。
  • 兼容性和可移植性:NanoMQ 采用純凈的 C/C++ 開發,只依賴于標準 POSIX API,同時支持大小端兼容,可無縫對接各類網絡應用,零成本遷移到各類嵌入式平臺。
  • 可伸縮性:借助內置的異步 IO 架構和多線程模型,NanoMQ 在保持輕量化的同時仍具備一定可橫向拓展的并發吞吐能力。僅需不到 10MB 的內存消耗,即可支持超過 10W 的消息吞吐。
  • SMP 支持:NanoMQ 在邊緣多核平臺上對 SMP 有著良好的支持,能夠充分發揮多處理器的能力,從而提升系統性能。
  • 容器支持:NanoMQ 能夠輕松地通過容器進行部署和運行,并且與主流的邊緣容器編排方案兼容,使得部署過程更加靈活和便捷。

二進制包安裝

首先進入 NanoMQ 官網下載頁面,選擇 Windows 平臺下載安裝包:

下載 NanoMQ

可以在解壓后文件夾中的bin目錄下用 Windows 命令行使用 NanoMQ。將解壓后的 C:\xxx\nanomq-0.21.10-windows-x86_64\bin 目錄添加到環境變量中,則可以在 Windows 命令行或者 PowerShell 中直接使用 NanoMQ。輸入 nanomq --help 可以看到簡要的使用說明。

NanoMQ 命令

使用 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

從上圖中可以看到 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 來進行消息收發測試。

MQTTX

從上圖中同樣可以看到,訂閱了 nmqtest 主題的客戶端通過 NanoMQ 收到了另一個客戶端發布的 hello 消息。

結語

本文通過二進制包和源碼編譯的方式完成了 NanoMQ 在 Windows 平臺的安裝,并對其使用進行了演示測試。NanoMQ 為在 Windows 平臺上構建物聯網邊緣計算應用提供了一個便捷而強大的選擇。它的輕量級、高性能以及專注于邊緣計算的設計使其成為一個理想的消息傳輸解決方案。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/45025.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/45025.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/45025.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

匯聚榮做拼多多電商怎么樣?

匯聚榮做拼多多電商怎么樣?在當前電商平臺競爭激烈的背景下,拼多多憑借其獨特的商業模式和市場定位迅速崛起。對于想要加入拼多多的商家而言,了解平臺的特點、優勢及挑戰是至關重要的。本文將深入分析加入拼多多電商的多個方面,幫助讀者全面…

ubuntu計劃任務反彈

目錄 實驗環境 實驗步驟 目標主機構造任務計劃 構造語句 語句解釋 kali開啟監聽 監聽成功 問題 原因 實驗環境 攻擊者 操作系統:kali IP:192.168.244.141 目標主機 操作系統:ubuntu IP:192.168.244.151 實驗步驟 目…

論文學習_An Empirical Study of Deep Learning Models for Vulnerability Detection

1. 引言 研究背景:近年來,深度學習漏洞檢測工具取得了可喜的成果。最先進的模型報告了 0.9 的 F1 分數,并且優于靜態分析器。結果令人興奮,因為深度學習可能會給軟件保障帶來革命性的變化。因此,IBM、谷歌和亞馬遜等行業公司非常感興趣,并投入巨資開發此類工具和數據集。…

(8)揭示Python編程精髓:深潛繼承與多態的奇幻之旅

目錄 1. 命名空間與作用域1.1 命名空間概述1.2 作用域1.2.1 局部作用域1.2.2 全局作用域1.2.3 修改全局變量1.2.4 嵌套作用域 2. 繼承3. 多態(Polymorphism) 1. 命名空間與作用域 1.1 命名空間概述 命名空間是一個從名字到對象的映射,它在P…

Qt:19.浮動窗口/子窗口(子窗口介紹、代碼方式創建子窗口、設置子窗口標題、為子窗口添加控件、設置子窗口停靠位置)

目錄 1.子窗口介紹: 2.代碼方式創建子窗口: 3.設置子窗口標題: 4.為子窗口添加控件: 5.設置子窗口停靠位置。 1.子窗口介紹: 在 Qt 中,可以創建和管理子窗口(子窗口體)以實現多窗…

圖片怎么制作成長期可用的活碼?掃碼提供圖片預覽的制作技巧

現在圖片的尺寸和清晰度的質量越來越高,相對應的會占用更多的存儲空間,現在很多人會將圖片存入云端后,通過生成二維碼的方式,掃碼來查看圖片內容。圖片轉換二維碼有利于將圖片分享給其他人查看,還能夠節省更多的空間&a…

SpringBoot自己開發一個starter

提示:本文主要講述如何自行開發一個SpringBoot的starter 文章目錄 目錄 文章目錄 前言 一、Starter是什么 二、創建一個SpringBoot項目 1.創建一個基本的SpringBoot項目 2.選擇要下載的庫 三、設置項目 1.提示 2.配置pom.xml 3.重點代碼 1.創建一個User類…

16.x86游戲實戰-匯編指令push pop pushad popad

免責聲明:內容僅供學習參考,請合法利用知識,禁止進行違法犯罪活動! 本次游戲沒法給 內容參考于:微塵網絡安全 工具下載: 鏈接:https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd6tw3 提…

【第29章】MyBatis-Plus之分頁插件

文章目錄 前言一、支持的數據庫二、配置方法三、屬性介紹四、自定義 Mapper 方法中使用分頁五、其他注意事項六、Page 類七、實戰1. 配置類2. 分頁類3. 測試 總結 前言 MyBatis-Plus 的分頁插件 PaginationInnerInterceptor 提供了強大的分頁功能,支持多種數據庫&a…

Windows電腦安裝Python結合內網穿透輕松搭建可公網訪問私有網盤

文章目錄 前言1.本地文件服務器搭建1.1.Python的安裝和設置1.2.cpolar的安裝和注冊 2.本地文件服務器的發布2.1.Cpolar云端設置2.2.Cpolar本地設置 3.公網訪問測試4.結語 前言 本文主要介紹如何在Windows系統電腦上使用python這樣的簡單程序語言,在自己的電腦上搭建…

kubernetes授予用戶指定命名空間的使用權限

kubernetes授予用戶指定命名空間的使用權限 問題描述具體實現簽發客戶端證書創建RBAC策略生成kubeconfig文件 問題描述 假如我們部門來了個新同事,他需要使用kubernetes集群,但是因為他剛來,還不熟悉,所以不能直接將kubernetes集…

Spring如何控制Bean加載+執行順序

1. Order 注解和 Ordered 接口 用途:控制組件執行順序或排序,但不控制Bean初始化順序。定義執行順序:通過整數值指定組件優先級,數值越小優先級越高。集合排序:影響自動裝配到集合中的組件排列順序。使用場景&#xf…

77.MySQL的分頁查詢

一、LIMIT關鍵字 LIMIT關鍵字用于限制返回結果集中的行數。其基本語法如下: SELECT * FROM 表名 LIMIT 行數; 例如,要從名為mark_info的表中選擇最新創建的10個工單的信息,可以執行以下查詢: SELECT * FROM mark_info ORDER B…

電力需求預測挑戰賽筆記 Taks1 跑通baseline

#AI夏令營 #Datawhale #夏令營 賽題 一句話介紹賽題任務可以這樣理解賽題: 【訓練時序預測模型助力電力需求預測】 電力需求的準確預測對于電網的穩定運行、能源的有效管理以及可再生能源的整合至關重要。 賽題任務 給定多個房屋對應電力消耗歷史 N 天的相關序列數…

拓撲排序(算法篇)

算法之拓撲排序 拓撲排序 概念: 拓撲排序是對有向無圈圖的頂點的一種排序。排序不必是唯一的,任何合理的排序都是可以的。具體做法是:先找出任意一個沒有入邊的頂點v(就是沒有其他頂點指向的頂點),將頂點v放入隊列,…

element-plus el-table點擊當前行和劃過展示鼠標

在 Element Plus 的 el-table 組件中,設置滑過行時鼠標的樣式可以通過 CSS 來實現。你可以使用 CSS 的 cursor 屬性來定義鼠標懸停時的樣式。以下是一個簡單的例子: 首先,在你的 Vue 組件的 .el-table .el-table__row:hover {cursor: poin…

09.AOP-尚硅谷Spring零基礎入門到進階,一套搞定spring6全套視頻教程(源碼級講解)

現有代碼缺陷 針對帶日志功能的實現類,我們發現有如下缺陷: 對核心業務功能有干擾,導致程序員在開發核心業務功能時分散了精力附加功能分散在各個業務功能方法中,不利于統一維護 解決思路 解決核心:解耦。把附加功能從…

glm-4 聯網搜索 api 測試

今天測試了一下 glm-4 的聯網搜索 web_search tool 調用,發現了 web_search 的網頁檢索返回結果中幾個比較詭異的事情,特此記錄: 有些檢索結果沒有 icon、link、media 字段,但從內容上看確實是聯網搜索出來的結果,不知…

從零開始讀RocketMq源碼(三)Broker存儲Message流程解析

目錄 前言 準備 消息載體CommitLog 文件持久化位置 源碼解析 broker消息對象MessageExtBrokerInner 異步存儲message CommitLog的真相 創建MappedFile文件 加入異步刷盤隊列 Message異步存儲MappedByteBuffer 總結 前言 在面試中我們經常會聽到這樣的回答&#x…

國產化趨勢下源代碼數據防泄密的信創沙盒的方案分享

隨著國產化的大力推進,越來越多的企事業單位在逐步替換Windows、Linux等操作系統的使用。那么什是國產化了?國產化是指在產品或服務中采用國內自主研發的技術和標注,替代過去依賴的他國的產品和服務,國產化又被稱之為“信創”&…