MQTT.fx軟件使用簡單介紹

MQTT.fx 的軟件界面如下圖所示,最上方為 MQTT Broker 連接地址欄,及其連接配置。其下方功能 Tabs 含有 Publish 發布欄、Subscribe 訂閱欄、Scripts 腳本欄、Broker Status 狀態消息欄、Log 日志信息控制欄。

連接之前要明確幾個概念
以下概念僅供學習參考 ,個人理解 描述可能不嚴謹
概念1:什么是消息發布
我的個人理解 就是一個設備是作為信息提供的一方 也就是信息的生產者
概念2:什么是消息訂閱
我的個人理解 就是一個設備作為消息獲取的以防 也就是信息的消費者
概念3:什么是主題
我的個人理解 就是設備進行信息交互的平臺 可以類比公眾號我訂閱了某個公眾號那這個公眾號將來更新了文章我就可以閱讀,信息的消費者獲取信息的一個渠道,同時信息的生產者也可以把信息傳到上面供信息的消費者使用,這個公眾號就是一個轉發信息的橋梁
MQTT客戶端跟MQTT服務器都可以進行信息的發布

MQTT客戶端一旦連接到服務端,便可以發布消息。 每條發布的MQTT消息必須包含一個主題。MQTT服務器可以通過主題確定將消息轉發給哪些客戶端。(注:這里的消息指的是MQTT報文。)
在建立通信前簡單提一下QoS(Quality of Service)QoS表示MQTT消息的服務質量等級。QoS有三個級別:0、1和2。QoS決定MQTT通訊有什么樣的服務保證。
QoS:發布消息的服務質量,即:保證消息傳遞的次數
00:最多一次,即:<=1
01:至少一次,即:>=1
10:一次,即:=1
11:預留
什么是報文標識符
報文標識符可用于對MQTT報文進行標識。不同的MQTT報文所擁有的標識符不同。MQTT設備可以通過該標識符對MQTT報文進行甄別和管理。請注意:報文標識符的內容與QoS級別有密不可分的關系。只有QoS級別大于0時,報文標識符才是非零數值。如果QoS等于0,報文標識符為0。這里不展開說 如果大家對這個協議感興趣大家可以看MQTT協議的詳細文檔
我這里簡單描述下
在MQTT協議中規定了一個固定報頭 固定報頭的第一個字節有8個bit
其中高4位的排列組合表示MQTT數據包的類型,

總共4個bit 排列組合有16種情況 分別是以下類型
0 Reserved — 保留
1 CONNECT 客戶端到服務器 客戶端請求連接到服務器
2 CONNACK 服務器到客戶端 連接確認
3 PUBLISH 雙向 發布消息
4 PUBACK 雙向 發布確認
5 PUBREC 雙向 發布收到(保證第1部分到達)
6 PUBREL 雙向 發布釋放(保證第2部分到達)
7 PUBCOMP 雙向 發布完成(保證第3部分到達)
8 SUBSCRIBE 客戶端到服務器 客戶端請求訂閱
9 SUBACK 服務器到客戶端 訂閱確認
10 UNSUBSCRIBE 客戶端到服務器 請求取消訂閱
11 UNSUBACK 服務器到客戶端 取消訂閱確認
12 PINGREQ 客戶端到服務器 PING請求
13 PINGRESP 服務器到客戶端 PING應答
14DISCONNECT 客戶端到服務器 中斷連接
15Reserved — 保留
Qos 就是PUBLIS 數據包的低4位的bit2 bit1 其他數據包這兩位有其他的含義或者保留

保留標志的理解
在默認情況下,當客戶端訂閱了某一主題后,并不會馬上接收到該主題的信息。只有在客戶端訂閱該主題后,服務端接收到該主題的新信息時,服務端才會將最新接收到的該主題信息推送給客戶端。
但是在有些情況下,我們需要客戶端在訂閱了某一主題后馬上接收到一條該主題的信息。這時候就需要用到保留標志這一信息。
有效載荷的理解
有效載荷是我們希望通過MQTT所發送的實際內容。我們可以使用MQTT協議發送文本,圖像等格式的內容。這些內容都是通過有效載荷所發送的。
重發標志的理解
當MQTT報文的接收方沒有及時確認收到報文時,發送方會重復發送MQTT報文。在重復發送MQTT報文時,發送方會將此“重發標志”設置為true。請注意,重發標志只在QoS級別大于0時使用。因為大于0 表示 【01】:至少一次,即:>=1 【10】:一次,即:=1
連接設置可以參考我上一篇博客
這里已經連接成功

訂閱/發送消息
完成連接的建立之后,即可開始訂閱消息。因為 MQTT 協議采用的是訂閱/推送的方式,所以我們需要在連接之后訂閱主題,之后主題上有消息產生即可收到來自 EMQX Cloud 推送。
我在 EMQX Clouds 開啟了數據功能

這里的操作需要用到SQL 語言 我不太了解 就用示例的幾個例子進行了簡單的配置
具體配置如下

我的理解是當客戶端 建立了對這個主題的連接時候會觸發一個事件 這個事件會觸發一個消息
消息是JSON 格式
訂閱主題
訂閱兩個主題:


向某個主題發布消息
這是向AQST/TEST 發布的消息

這是收到AQST/TEST 發布的消息

這是向t/a這個主題發布的消息

這是訂閱了t/a這個主題收到的消息

至此:
兩個主題的訂閱跟發布都測試通過了
看一下后臺數據記錄,連接數最多就是1 訂閱最多是2 報文流量根據發送的信息數據量也不一樣。
連接數含義
連接數圖表展示了在選擇時間段內,連接到部署的客戶端的數量。這里連接的客戶端數也包含了保留會話的離線客戶端。保留會話,即客戶端斷開連接時,會話仍然保持并保存離線消息,直到會話超時注銷。
訂閱數含義
訂閱數圖表展示在選擇的時間段內部署的總訂閱數
總流量含義:接收和發送消息的報文總量。
接受報文流量:從設備或應用端發送到部署的消息的報文總量。
發送報文流量:從部署發送到設備或應用端的消息的報文總量。
消息流入流出含義
消息流入流出圖表展示在選擇的時間段內,部署接收到的消息數、發送出去的消息數和未被訂閱的消息數。
部署接收到的消息為從設備或應用端發送到部署的消息數。
部署發送的消息為從部署發送到設備或應用端的消息
報文流量含義
報文流量圖表展示在選擇的時間段內,部署接收到的消息以及發送出去的消息報文流量,包含以下3種數據:

丟棄消息
丟棄消息圖表顯示在所選時間段內發送階段丟棄的消息。消息被丟棄的原因可能是報文太大、消息隊列已滿或消息過期。
好了、之所以用MQTT.fx軟件進行消息發布與訂閱是為了測試消息發布跟訂閱的流程,明確主題、訂閱、發布的概念,當然MQTT協議內容很多,后續會考慮用ESP32 當作MQTT客戶端進行數據的通信測試。