0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

對RyanMqtt的QOS消息質(zhì)量穩(wěn)定性進行測試

冬至子 ? 來源:Ryan_CW ? 作者:Ryan_CW ? 2023-10-08 14:38 ? 次閱讀

測試環(huán)境:stm32F401RCT6、RT-Thread版本: v4.1.0、RT-Thread Studio版本: 2.2.6、網(wǎng)絡(luò)硬件使用ec800m移植at_socket使用sal框架。

1、測試介紹
我移植的這個at驅(qū)動還不完善,頻繁發(fā)送消息時會導(dǎo)致網(wǎng)絡(luò)斷連,打開調(diào)試進行一些延時就沒問題了。但是斷連的特性反而有助于我們進行qos測試。

因為我們要測試斷網(wǎng)后qos消息質(zhì)量的穩(wěn)定性,所以 cleanSessionFlag(清除會話)必須為false
由于我們要測試中途被mqtt服務(wù)器踢掉后的效果,所以示例使用的我的mqtt服務(wù)器,您如果有興趣測試這個的話請修改配置信息為您的服務(wù)器

要測試的功能如下圖。都是發(fā)送20條消息。

1.jpg

2、測試發(fā)布QOS1 / QOS2消息
網(wǎng)絡(luò)正常情況發(fā)送,發(fā)送qos1消息
打印日志上面紅框表示RyanMqtt發(fā)布了多少條消息也就是 RyanMqttPublish 接口回復(fù)ok的次數(shù),下面表示真正完成發(fā)布了多少條

1.jpg

emqx截圖,可以看到是20條。但細(xì)心的你肯定發(fā)現(xiàn)了發(fā)送的信息居然不是按順序來的,這是因為emqx設(shè)置訂閱的qos2主題,實際顯示將會按照qos2完成時間來進行顯示

1.jpg

網(wǎng)絡(luò)正常情況發(fā)送,發(fā)送qos2消息

1.jpg

2.jpg

模擬發(fā)送中途斷網(wǎng),發(fā)送qos1消息
這里模擬的意思是:發(fā)送第5條的時候把網(wǎng)絡(luò)硬件進行關(guān)閉,發(fā)送第10條時啟動網(wǎng)絡(luò)硬件,觀察發(fā)布消息和實際消息是否對得上號

1.jpg

看上面日志咱們發(fā)送了12條,emqx為什么會收到13條呢?
這就是qos1的特性了,允許至少一次的重復(fù)接收,咱們斷網(wǎng)重新連接的時候根據(jù)qos1的特性咱們是可以重新發(fā)送的。

1.jpg

模擬發(fā)送中途斷網(wǎng),發(fā)送qos2消息
這里模擬的意思是:發(fā)送第5條的時候把網(wǎng)絡(luò)硬件進行關(guān)閉,發(fā)送第10條時啟動網(wǎng)絡(luò)硬件,觀察發(fā)布消息和實際消息是否對得上號
這里我們就遇到了開頭說的ec800m驅(qū)動問題,qos2需要較多的網(wǎng)絡(luò)交互,ec800直接罷工了。
但是等它重連后我們可以發(fā)現(xiàn),qos2的消息依然可以穩(wěn)定保證只有一次。(之前我自己進行的測試要比這嚴(yán)謹(jǐn)?shù)亩?,會考慮到多次斷網(wǎng)情況等)

1.jpg

2.jpg

模擬發(fā)送中途被踢,發(fā)送qos1消息
模擬中途被踢:發(fā)送20條,在中間的時候手動通過mqtt管理后臺把RyanMqtt客戶端踢掉
這個測試真考驗手速啊,試了4次才成功。
可以看到發(fā)送到15條的時候被mqtt服務(wù)器給踢掉了,等待重連后可以正常同步

1.jpg

2.jpg

模擬發(fā)送中途被踢,發(fā)送qos2消息
模擬中途被踢:發(fā)送20條,在中間的時候手動通過mqtt管理后臺把RyanMqtt客戶端踢掉
可以看到發(fā)送了15條,但是收到了21條!是bug嗎?其實不然,這主要是emqx服務(wù)器的策略問題,因為是主動剔除emqx服務(wù)器會清除會話上下文,導(dǎo)致qos2消息多接收。
所以說重大風(fēng)險的環(huán)境,一定不要只依靠qos2,太多因素會導(dǎo)致意料之外的結(jié)果。一定要通過應(yīng)用層來保證最終一致性

1.jpg

2.jpg

2、測試訂閱QOS1 / QOS2消息
為了方便觀察效果,我們使用emqx的腳本功能,給所有發(fā)送消息尾部加一個0 - 1000的隨機值。方便觀察消息接收情況。
腳本如下

1.jpg

網(wǎng)絡(luò)正常情況接收,接收qos1消息

1.jpg

2.jpg

網(wǎng)絡(luò)正常情況接收,接收qos2消息

1.jpg

2.jpg

模擬接收中途斷網(wǎng),接收qos1消息
實驗條件:使用mqttx上位機發(fā)布10條消息,RyanMqtt收到第5條后重啟網(wǎng)絡(luò)硬件,看聯(lián)網(wǎng)后是否可以接收到消息

1.jpg

2.jpg

模擬接收中途斷網(wǎng),接收qos2消息
實驗條件:使用mqttx上位機發(fā)布10條消息,RyanMqtt收到第5條后重啟網(wǎng)絡(luò)硬件,看聯(lián)網(wǎng)后是否可以接收到消息

1.jpg

2.jpg

模擬接收中途被踢,接收qos1消息
模擬接收中途被踢,接收qos2消息
實驗條件:我使用mqttx的自動發(fā)送功能,一秒發(fā)一條。發(fā)送20條消息,當(dāng)發(fā)送5 - 10條后從emqx服務(wù)器剔除RyanMqtt客戶端

尷尬的發(fā)現(xiàn)沒法測試,上面測試發(fā)布消息剔除的時候說過emqx服務(wù)器的剔除會清除會話信息,清除后會話信息,雖然RyanMqtt依然保留著訂閱主題信息,但是emq服務(wù)器的訂閱信息不存在了。
所以不管有沒有使能clearSession,都非常推薦在連接成功回調(diào)函數(shù)中訂閱主題。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 接收機
    +關(guān)注

    關(guān)注

    8

    文章

    1158

    瀏覽量

    53171
  • 上位機
    +關(guān)注

    關(guān)注

    27

    文章

    927

    瀏覽量

    54551
  • RT-Thread
    +關(guān)注

    關(guān)注

    31

    文章

    1239

    瀏覽量

    39435
  • STM32F401
    +關(guān)注

    關(guān)注

    1

    文章

    16

    瀏覽量

    10435
  • MQTT協(xié)議
    +關(guān)注

    關(guān)注

    0

    文章

    93

    瀏覽量

    5308
收藏 人收藏

    評論

    相關(guān)推薦

    HarmonyOS應(yīng)用兼容穩(wěn)定性測試

    HAP 和 APP 兩種格式,如果未上傳應(yīng)用,請先從本地上傳一個 HarmonyOS 應(yīng)用包。 ● 測試時長設(shè)置:設(shè)置穩(wěn)定性測試測試時長。 說明 每天只能
    發(fā)表于 12-25 10:56

    藥品穩(wěn)定性試驗箱的作用

    、潮濕等環(huán)境下對新藥品進行測試,也可以用作某些特殊需要恒定溫度和恒定濕度藥品的保存箱。藥品穩(wěn)定性保存  藥品穩(wěn)定性試驗箱在功能結(jié)構(gòu)上包含了制冷系統(tǒng)、制熱系統(tǒng)、加濕系統(tǒng)等三個部分,這三個
    發(fā)表于 06-22 16:29

    瞬態(tài)穩(wěn)定性測試:注意步長

    簡單處理后,John 選擇了能達(dá)到 45 度相位裕度的 RISO 值,然后就可以在工作臺上進行結(jié)果測試。如果您遇到了同樣的問題,那么需要小心。大部分在仿真中測試穩(wěn)定性的高級方法通常在工
    發(fā)表于 09-20 15:37

    如何測試電源設(shè)計的穩(wěn)定性測量

    產(chǎn)后期因環(huán)境變化和/或工作極限條件而變得不穩(wěn)定。在這些情況下,原型設(shè)計可能運行良好,但電源內(nèi)的相位和增益裕度卻沒在原型測試中得到測試。如果設(shè)計人員能夠?qū)﹄娫吹?b class='flag-5'>穩(wěn)定性
    發(fā)表于 09-20 16:00

    LED燈具的性能及穩(wěn)定性測試

    穩(wěn)定性測試。費思方案設(shè)備:電源:FTG系列電源。FTP系列電源(供電)負(fù)載:FT6100系列多通道電子負(fù)載,(用于分配個通道電流)實現(xiàn)原理:負(fù)載能夠精準(zhǔn)快速的控制回路中的電流,實現(xiàn)恒流輸出。并且可以實現(xiàn)
    發(fā)表于 12-07 15:00

    開關(guān)電源穩(wěn)定性測試 開關(guān)電源穩(wěn)定性

    測出來的結(jié)果是不準(zhǔn)確的。 圖 3 FRA測量時注入電阻的位置及接線 四、開關(guān)電源穩(wěn)定性測試舉例:在了解影響產(chǎn)品穩(wěn)定性的因素和判定準(zhǔn)則以及怎樣來檢測產(chǎn)品后,就可以對所測的產(chǎn)品的結(jié)果進行
    發(fā)表于 12-24 18:35

    如何測試LWIP通信穩(wěn)定性和速率?

    原子哥你好:我咨詢下您,用STM32移植LWIP的話,就你的經(jīng)驗。穩(wěn)定性好不好?我發(fā)送大一點的數(shù)據(jù)包。比喻我不斷發(fā)送1500Byte左右的數(shù)據(jù)包。用tcp調(diào)試助手接收。這個通信 速率您測試過沒有呢?會不會不穩(wěn)定???我的目的是想用
    發(fā)表于 07-12 04:36

    運放穩(wěn)定性的標(biāo)準(zhǔn)及測試

    運放穩(wěn)定性的標(biāo)準(zhǔn)及測試環(huán)路增益穩(wěn)定性舉例
    發(fā)表于 04-06 06:30

    服務(wù)器穩(wěn)定性測試方法

    ,如果要進行香港服務(wù)器測試就要針對你放置網(wǎng)站的每個細(xì)節(jié)和功能全面的操作測試,根據(jù)每個功能操作下的不同性能來測試。2、多線路測試在對香港服務(wù)器
    發(fā)表于 09-20 09:56

    RyanMqtt實現(xiàn)MQTT3.1.1協(xié)議的客戶端

    使用,作者不對使用此庫造成的任何經(jīng)濟損失負(fù)責(zé)。(盡管此庫QOS2消息等級經(jīng)過很多測試,但是異步組件由于諸多因素例如波動非常大的網(wǎng)絡(luò)甚至無法建立穩(wěn)定的tcp連接、mqtt服務(wù)端的策略配置等,無法做到絕對的實時性,需要用戶手動做到數(shù)
    發(fā)表于 12-01 15:19

    如何測試ERP系統(tǒng)的穩(wěn)定性

    一個軟件的穩(wěn)定性對企業(yè)的工作產(chǎn)生著重要的影響,ERP系統(tǒng)如果在使用過程中安全性出現(xiàn)問題的,可能會導(dǎo)致數(shù)據(jù)的缺失,這將會影響決策。那么如何測試ERP系統(tǒng)的穩(wěn)定性呢?下面一起來了解一下吧! 測試
    發(fā)表于 05-13 17:00 ?979次閱讀

    電源測試穩(wěn)定性測量

    電源測試穩(wěn)定性測量
    發(fā)表于 11-07 08:07 ?7次下載
    電源<b class='flag-5'>測試</b>:<b class='flag-5'>穩(wěn)定性</b>測量

    怎么分析電路的穩(wěn)定性?

    怎么分析電路的穩(wěn)定性?? 電路的穩(wěn)定性是指電路在不同條件下保持穩(wěn)定的能力。穩(wěn)定性是電路設(shè)計中十分重要的一個方面,因為穩(wěn)定的電路能夠提供可靠和
    的頭像 發(fā)表于 09-17 16:44 ?1450次閱讀

    如何保證電源適配器的質(zhì)量穩(wěn)定性

    如何保證電源適配器的質(zhì)量穩(wěn)定性? 要保證電源適配器的質(zhì)量穩(wěn)定性,需要從設(shè)計、制造、測試和驗收等多個環(huán)節(jié)入手,以下是詳細(xì)的措施: 1. 設(shè)
    的頭像 發(fā)表于 11-23 16:04 ?704次閱讀

    什么是熱電偶穩(wěn)定性?影響熱電偶穩(wěn)定性的主要因素

    的準(zhǔn)確性和精度。本文將詳細(xì)討論影響熱電偶穩(wěn)定性的主要因素,并介紹一些常用的測試方法。 熱電偶穩(wěn)定性主要受以下幾個方面因素的影響: 1. 熱電偶材料:熱電偶的材料決定了其穩(wěn)定性。常見的熱
    的頭像 發(fā)表于 03-08 15:32 ?827次閱讀