若該文爲原創文章,未經容許不得轉載 原博主博客地址:https://blog.csdn.net/qq21497936
原博主博客導航:http://www.javashuo.com/article/p-wxwjppoc-mo.html
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/106539703 各位讀者,知識無窮而人力有窮,要麼改需求,要麼找專業人士,要麼本身研究
紅胖子(紅模仿)的博文大全:開發技術集合(包含Qt實用技術、樹莓派、三維、OpenCV、OpenGL、ffmpeg、OSG、單片機、軟硬結合等等)持續更新中…(點擊傳送門)html
Qt開發專欄:開發技術(點擊傳送門)
《Qt開發技術:mqtt介紹、QtMqtt編譯和開發環境搭建》
《Mqtt開發筆記:Mqtt服務器搭建》java
<br>web
前話
使用到mqtt服務器(中間件)。apache
<br>windows
MQTT協議
簡介
MQTT(Message Queuing Telemetry Transport,消息隊列遙測傳輸協議),是一種基於發佈/訂閱(publish/subscribe)模式的"輕量級"通信協議,該協議構建於TCP/IP協議上,由IBM在1999年發佈。MQTT最大優勢在於,能夠以極少的代碼和有限的帶寬,爲鏈接遠程設備提供實時可靠的消息服務。做爲一種低開銷、低帶寬佔用的即時通信協議,使其在物聯網、小型設備、移動應用等方面有較普遍的應用。瀏覽器
設計原則
- 精簡,不添加無關緊要的功能;
- 發佈/訂閱(Pub/Sub)模式,方便消息在傳感器之間傳遞;
- 容許用戶動態建立主題,零運維成本;
- 把傳輸量降到最低以提升傳輸效率;
- 把低帶寬、高延遲、不穩定的網絡等因素考慮在內;
- 支持連續的會話控制;
- 理解客戶端計算能力可能很低;
- 提供服務質量管理;
- 假設數據不可知,不強求傳輸數據的類型與格式,保持靈活性。
特色
- 使用發佈/訂閱消息模式,提供一對多的消息發佈,解除應用程序耦合 這一點很相似於XMPP,可是MQTT的信息冗餘遠小於XMPP,,由於XMPP使用XML格式文原本傳遞數據。
- 對負載內容屏蔽的消息傳輸
- 使用TCP/IP提供網絡鏈接 主流的MQTT是基於TCP鏈接進行數據推送的,可是一樣有基於UDP的版本,叫作MQTT-SN。這兩種版本因爲基於不一樣的鏈接方式,優缺點天然也就各有不一樣了。
- 有三種消息發佈服務質量 "至多一次",消息發佈徹底依賴底層TCP/IP網絡。會發生消息丟失或重複。這一級別可用於以下狀況,環境傳感器數據,丟失一次讀記錄無所謂,由於不久後還會有第二次發送。這一種方式主要普通APP的推送,假若你的智能設備在消息推送時未聯網,推送過去沒收到,再次聯網也就收不到了。
"至少一次",確保消息到達,但消息重複可能會發生。 "只有一次",確保消息到達一次。在一些要求比較嚴格的計費系統中,可使用此級別。在計費系統中,消息重複或丟失會致使不正確的結果。這種最高質量的消息發佈服務還能夠用於即時通信類的APP的推送,確保用戶收到且只會收到一次。 - 小型傳輸,開銷小 (固定長度的頭部是2字節),協議交換最小化,以下降網絡流量。很是適合"在物聯網領域,傳感器與服務器的通訊,信息的收集",嵌入式設備的運算能力和帶寬都相對薄弱,使用這種協議來傳遞消息再適合不過了。
- 客戶端異常中斷的機制。 Last Will:即遺言機制,用於通知同一主題下的其餘設備發送遺言的設備已經斷開了鏈接。 Testament:遺囑機制,功能相似於Last Will。
發佈/訂閱者模式
MQTT是一個基於客戶端-服務器的消息發佈/訂閱傳輸協議。MQTT協議是輕量、簡單、開放和易於實現的,這些特色使它適用範圍很是普遍。 在不少狀況下,包括受限的環境中,如:機器與機器(M2M)通訊和物聯網(IoT)。其在,經過衛星鏈路通訊傳感器、偶爾撥號的醫療設備、智能家居、及一些小型化設備中已普遍使用。 從圖上MQTT有三種角色的存在:服務器
- Broker代理:不少人理解爲中間件,固然能夠這樣子認爲。他就是一箇中間件。用於處理信息併發送到相應的訂閱者。
- 發佈者:用於發佈信息到代理上面。注意:發佈者也能夠是訂閱者。
- 訂閱者:就是用於接受信息的客戶端。
MQTT服務器
MQTT服務器以稱爲"消息代理"(Broker),能夠是一個應用程序或一臺設備。它是位於消息發佈者和訂閱者之間,它能夠:網絡
- 接受來自客戶的網絡鏈接;
- 接受客戶發佈的應用信息;
- 處理來自客戶端的訂閱和退訂請求;
- 向訂閱的客戶轉發應用程序消息。
MQTT協議中的方法
MQTT協議中定義了一些方法(也被稱爲動做),來於表示對肯定資源所進行操做。這個資源能夠表明預先存在的數據或動態生成數據,這取決於服務器的實現。一般來講,資源指服務器上的文件或輸出。主要方法有:併發
- Connect:等待與服務器創建鏈接
- Disconnect:等待MQTT客戶端完成所做的工做,並於服務器斷開TCP/IP會話
- Subscribe:等待完成訂閱
- UnSubscribe:等待服務器取消客戶端的一個活多個和topics訂閱
- Publish:MQTT客戶端發送消息請求,發送完成後返回應用程序線程
<br>oracle
Windows上Apache Apoll環境搭建(mqtt)
下載Apache Apoll
官方下載地址:https://activemq.apache.org/
CSDN下載地址:https://download.csdn.net/download/qq21497936/11214539
安裝jdk
官方下載地址:https://www.oracle.com/technetwork/java/javase/downloads/index.html
CSDN下載地址:https://download.csdn.net/download/qq21497936/11214604
下載系統對應的版本,windows x64位
添加java路徑到系統Path變量
JAVA_HOME
C:\Program Files\Java\jdk-12.0.1
PATH(最後面加上)
;%JAVA_HOME%\bin\
加粗樣式CLASSPATH
.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
使用cmd運行java命名,jdk環境配置成功,以下圖:
安裝Apache Apoll
解壓
將Apache Apoll解壓到C盤下(自定義),以下圖:
\
建立實例
使用cmd進入該文件夾建立實例:
cd C:\apache-activemq-5.15.9 cd bin activemq-admin.bat create mybroker
查看登陸用戶名和密碼
進入mybroker/conf,查看users.properties,能夠看到用戶名
查看tcp監聽端口(可自行修改,筆者不修改)
查看web管理頁面端口(可自行修改,筆者不修改)
運行apache apoll
cd C:\apache-activemq-5.15.9\bin\mybroker\bin mybroker.bat start
測試安裝
步驟一:打開ie(瀏覽器)
步驟二:輸入網址http://localhost:8161/admin
步驟三:輸入admin,admin
步驟四:建立隊列測試
步驟五(補充):遠程管理
至此windows server2008 r2系統上的apache apoll中間件環境以及服務成功搭建完成。
<br>
常見錯誤處理
鏈接時Qt返回錯誤碼257
客戶端遇到協議違規,所以關閉了鏈接。 錯誤 檢查服務器報錯 緣由 ActiveMQ有時會報相似Frame size of 257 MB larger than max allowed 100 MB的錯誤,意思是單條消息超過了預設的最大值,在配置文件中
<transportConnector name="openwire" uri="tcp://0.0.0.0:61616? maximumConnections=1000&wireFormat.maxFrameSize=1048576000"/>
咱們能夠配置這個值,可是有時會忽然出現很大的單條消息,好比1G。 分析 QtMqtt與服務鏈接,傳過去的屬性最大值多是258MB,因此直接修改服務器配置。 解決方法 重啓服務
<br>
原博主博客地址:https://blog.csdn.net/qq21497936
原博主博客導航:http://www.javashuo.com/article/p-wxwjppoc-mo.html
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/106539703