Mqtt開發筆記:Mqtt服務器搭建


 

前話

  業務需求,需要使用到mqtt協議(中間件)。

 

MQTT協議

簡介

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

設計原則

  • 精簡,不添加可有可無的功能;
  • 發布/訂閱(Pub/Sub)模式,方便消息在傳感器之間傳遞;
  • 允許用戶動態創建主題,零運維成本;
  • 把傳輸量降到最低以提高傳輸效率;
  • 把低帶寬、高延遲、不穩定的網絡等因素考慮在內;
  • 支持連續的會話控制;
  • 理解客戶端計算能力可能很低;
  • 提供服務質量管理;
  • 假設數據不可知,不強求傳輸數據的類型與格式,保持靈活性。

特點

  1. 使用發布/訂閱消息模式,提供一對多的消息發布,解除應用程序耦合
      這一點很類似於XMPP,但是MQTT的信息冗余遠小於XMPP,,因為XMPP使用XML格式文本來傳遞數據。
  2. 對負載內容屏蔽的消息傳輸
  3. 使用TCP/IP提供網絡連接
      主流的MQTT是基於TCP連接進行數據推送的,但是同樣有基於UDP的版本,叫做MQTT-SN。這兩種版本由於基於不同的連接方式,優缺點自然也就各有不同了。
  4. 有三種消息發布服務質量
    "至多一次",消息發布完全依賴底層TCP/IP網絡。會發生消息丟失或重復。這一級別可用於如下情況,環境傳感器數據,丟失一次讀記錄無所謂,因為不久后還會有第二次發送。這一種方式主要普通APP的推送,倘若你的智能設備在消息推送時未聯網,推送過去沒收到,再次聯網也就收不到了。
    "至少一次",確保消息到達,但消息重復可能會發生。
    "只有一次",確保消息到達一次。在一些要求比較嚴格的計費系統中,可以使用此級別。在計費系統中,消息重復或丟失會導致不正確的結果。這種最高質量的消息發布服務還可以用於即時通訊類的APP的推送,確保用戶收到且只會收到一次。
  5. 小型傳輸,開銷小
      (固定長度的頭部是2字節),協議交換最小化,以降低網絡流量。非常適合"在物聯網領域,傳感器與服務器的通信,信息的收集",嵌入式設備的運算能力和帶寬都相對薄弱,使用這種協議來傳遞消息再適合不過了。
  6. 客戶端異常中斷的機制。
    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客戶端發送消息請求,發送完成后返回應用程序線程
 

Windows上Apache Apoll環境搭建(mqtt)

下載Apache Apoll

安裝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中間件環境以及服務成功搭建完成。

 

常見錯誤處理

連接時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&amp;wireFormat.maxFrameSize=1048576000"/>

  我們可以配置這個值,但是有時會突然出現很大的單條消息,比如1G。
分析
  QtMqtt與服務連接,傳過去的屬性最大值可能是258MB,所以直接修改服務器配置。
解決方法
  重啟服務

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM