最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網 會員登陸 & 注冊

Mqtt開發(fā)筆記:windows下C++ ActiveMQ客戶端介紹、編譯和使用

2022-08-02 11:38 作者:紅胖子_AAA紅模仿  | 我要投稿

前話

??項目需求,需要使用到mqtt協議,之前編譯QtMqtt庫,不支持隊列模式queue(點對點),只支持訂閱/發(fā)布者模式.,所以使用C++ ActiveMQ實現。

MQTT協議

簡介

??MQTT(Message Queuing Telemetry Transport,消息隊列遙測傳輸協議),是一種基于發(fā)布/訂閱(publish/subscribe)模式的"輕量級"通訊協議,該協議構建于TCP/IP協議上,由IBM在1999年發(fā)布。MQTT最大優(yōu)點在于,可以以極少的代碼和有限的帶寬,為連接遠程設備提供實時可靠的消息服務。作為一種低開銷、低帶寬占用的即時通訊協議,使其在物聯網、小型設備、移動應用等方面有較廣泛的應用。

設計原則

  • 精簡,不添加可有可無的功能;

  • 發(fā)布/訂閱(Pub/Sub)模式,方便消息在傳感器之間傳遞;

  • 允許用戶動態(tài)創(chuàng)建主題,零運維成本;

  • 把傳輸量降到最低以提高傳輸效率;

  • 把低帶寬、高延遲、不穩(wěn)定的網絡等因素考慮在內;

  • 支持連續(xù)的會話控制;

  • 理解客戶端計算能力可能很低;

  • 提供服務質量管理;

  • 假設數據不可知,不強求傳輸數據的類型與格式,保持靈活性。

特點

??1) 使用發(fā)布/訂閱消息模式,提供一對多的消息發(fā)布,解除應用程序耦合
這一點很類似于XMPP,但是MQTT的信息冗余遠小于XMPP,,因為XMPP使用XML格式文本來傳遞數據。
??2) 對負載內容屏蔽的消息傳輸
??3) 使用TCP/IP提供網絡連接
主流的MQTT是基于TCP連接進行數據推送的,但是同樣有基于UDP的版本,叫做MQTT-SN。這兩種版本由于基于不同的連接方式,優(yōu)缺點自然也就各有不同了。
??4) 有三種消息發(fā)布服務質量

  • “至多一次”,消息發(fā)布完全依賴底層TCP/IP網絡。會發(fā)生消息丟失或重復。這一級別可用于如下情況,環(huán)境傳感器數據,丟失一次讀記錄無所謂,因為不久后還會有第二次發(fā)送。這一種方式主要普通APP的推送,倘若你的智能設備在消息推送時未聯網,推送過去沒收到,再次聯網也就收不到了。

  • “至少一次”,確保消息到達,但消息重復可能會發(fā)生。

  • “只有一次”,確保消息到達一次。在一些要求比較嚴格的計費系統(tǒng)中,可以使用此級別。在計費系統(tǒng)中,消息重復或丟失會導致不正確的結果。這種最高質量的消息發(fā)布服務還可以用于即時通訊類的APP的推送,確保用戶收到且只會收到一次。

??5) 小型傳輸,開銷小
(固定長度的頭部是2字節(jié)),協議交換最小化,以降低網絡流量。非常適合"在物聯網領域,傳感器與服務器的通信,信息的收集",嵌入式設備的運算能力和帶寬都相對薄弱,使用這種協議來傳遞消息再適合不過了。
??6) 客戶端異常中斷的機制。

  • Last Will:即遺言機制,用于通知同一主題下的其他設備發(fā)送遺言的設備已經斷開了連接。

  • Testament:遺囑機制,功能類似于Last Will。

發(fā)布/訂閱者模式

??MQTT是一個基于客戶端-服務器的消息發(fā)布/訂閱傳輸協議。MQTT協議是輕量、簡單、開放和易于實現的,這些特點使它適用范圍非常廣泛。在很多情況下,包括受限的環(huán)境中,如:機器與機器(M2M)通信和物聯網(IoT)。其在,通過衛(wèi)星鏈路通信傳感器、偶爾撥號的醫(yī)療設備、智能家居、及一些小型化設備中已廣泛使用。
??


??從圖上MQTT有三種角色的存在:

  • Broker代理:很多人理解為中間件,當然可以這樣子認為。他就是一個中間件。用于處理信息并發(fā)送到相應的訂閱者。

  • 發(fā)布者:用于發(fā)布信息到代理上面。注意:發(fā)布者也可以是訂閱者。

  • 訂閱者:就是用于接受信息的客戶端。

MQTT服務器

??MQTT服務器以稱為"消息代理"(Broker),可以是一個應用程序或一臺設備。它是位于消息發(fā)布者和訂閱者之間,它可以:

  • 接受來自客戶的網絡連接;

  • 接受客戶發(fā)布的應用信息;

  • 處理來自客戶端的訂閱和退訂請求;

  • 向訂閱的客戶轉發(fā)應用程序消息。

MQTT協議中的方法

??MQTT協議中定義了一些方法(也被稱為動作),來于表示對確定資源所進行操作。這個資源可以代表預先存在的數據或動態(tài)生成數據,這取決于服務器的實現。通常來說,資源指服務器上的文件或輸出。主要方法有:

  • Connect:等待與服務器建立連接

  • Disconnect:等待MQTT客戶端完成所作的工作,并于服務器斷開TCP/IP會話

  • Subscribe:等待完成訂閱

  • UnSubscribe:等待服務器取消客戶端的一個活多個和topics訂閱

  • Publish:MQTT客戶端發(fā)送消息請求,發(fā)送完成后返回應用程序線程

CMS客戶端

??CMS API是一種類似JMS的C ++ API,用于與Message Brokers(如Apache ActiveMQ)進行交互。CMS有助于使C ++客戶端代碼更整潔,更易于遵循。ActiveMQ-CPP是僅客戶端庫,客戶端仍需要消息代理(如Apache ActiveMQ)進行通信。

下載源碼

??下載當前最新的windows版本源碼,下載地址如下:
??官網地址:https://activemq.apache.org/components/cms/
??CSDN下載地址:https://download.csdn.net/download/qq21497936/11233575

編譯avtivemq-cpp

??筆者使用的是VS2017。

步驟一:解壓

??將下載下來的壓縮文件解壓到編譯的專用文件夾:
??

步驟二:VS2017載入工程文件

??使用VS2017打開VS2010的工程文件:
??


??


??編譯”avtivemq-cpp”
???

步驟三:解決編譯錯誤:“/ZI”和“/Gy-”命令行選項不兼容

??編譯錯誤:
??


??解決方法:
??需要手動改變/Zl命令、/Gy命令:進入“項目”->“屬性”->“C/C++”->“常規(guī)”->“調試信息格式”->選擇“程序數據庫(/Zi)”。
??


???


??需要手動改變/Zl命令、/Gy命令:進入“項目”->“屬性”->“C/C++”->“代碼生成”->“啟用函數級鏈接”->選擇“是(/Gy)”。
??

步驟四:繼續(xù)右鍵工程生成

???

步驟五:解決編譯錯誤:“無法打開包括文件:apr_pools.h”

??(需要編譯Apr庫,請查看后續(xù)章節(jié)“VS2017編譯Apr-1.7.0庫”),編譯完成后,加入代碼中:
???

步驟六:繼續(xù)右鍵工程生成debug和release

??編譯通過:
??


??以上編譯的是debug版本,切換到release,需要再次配置包含頭文件屬性,然后開始編譯,耗費一定時間(約15-30分鐘)。
??

??

步驟七:頭文件以及庫文件歸類

??


??lib太大,無法上傳。

VS2017編譯Apr-1.7.0庫

??Active mq依賴一些額外的庫,在源碼的根目錄下的REAEDME.txt中有介紹,如下圖:
??

步驟一:下載部署

??Apr下載地址:http://apr.apache.org/download.cgi
??CSDN下載地址:https://download.csdn.net/download/qq21497936/11233615
??


??下載源碼解壓到專用的編譯文件夾:
??

步驟二:CMake配置工程

??需要使用到CMake。
??CMake是一個工程文件生成工具。用戶可以使用預定義好的CMake腳本,根據自己配置選擇開發(fā)環(huán)境(像是Visual Studio, Code::Blocks, Eclipse)生成不同IDE的工程文件。
??cmake下載地址:http://download.csdn.net/download/qq21497936/10154545
??

??解壓后直接運行cmake-gui.exe
??


??使用cmake生成apr的2017工程文件:
??

步驟三:CMake生成工程

??

??CMake順利生成。
??

步驟四:VS2017打開工程

??使用VS2017打開工程文件:
??

??

步驟五:編譯

??右鍵“All_BUILD”屬性,點擊“生成”,編程成功,如下圖:
??

步驟六:頭文件與庫文件歸類

??拿到apr.h頭文件,該頭文件在源碼中是沒有的,更具目標編譯版本生成的。
??

??頭文件include拷貝出來,需要將上面的apr.h拷貝進去
??

??庫文件:
??

??封裝好:
??


??提供CSDN下載
??VS2017 32位的:https://download.csdn.net/download/qq21497936/11234064
??VS2017 64位的:https://download.csdn.net/download/qq21497936/11234064


Mqtt開發(fā)筆記:windows下C++ ActiveMQ客戶端介紹、編譯和使用的評論 (共 條)

分享到微博請遵守國家法律
武乡县| 昌乐县| 永城市| 禹州市| 澎湖县| 儋州市| 临安市| 阿勒泰市| 独山县| 南投市| 轮台县| 龙川县| 洪雅县| 通许县| 临湘市| 衡山县| 吉首市| 三门县| 大城县| 平遥县| 营山县| 灵川县| 宁都县| 建平县| 东乡| 石林| 双辽市| 乌兰察布市| 梅州市| 闻喜县| 岗巴县| 海安县| 朔州市| 潜山县| 安溪县| 台北市| 盘锦市| 宾川县| 图们市| 南皮县| 镇宁|