Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
MQTT
原创征文
RyanMqtt QOS质量测试(二)
发布于 2023-09-28 14:51:06 浏览:1126
订阅该版
[tocm] 上一篇文章介绍了RyanMqtt的基本使用,这次我们来对RyanMqtt的QOS消息质量稳定性进行测试。 **完整测试工程会放到文末** **测试环境:stm32F401RCT6、RT-Thread版本: v4.1.0、RT-Thread Studio版本: 2.2.6、网络硬件使用ec800m移植at_socket使用sal框架。** ## 1、测试介绍 *我移植的这个at驱动还不完善,**频繁发送消息时会导致网络断连**,打开调试进行一些延时就没问题了。但是断连的特性反而有助于我们进行qos测试。* 因为我们要测试断网后qos消息质量的稳定性,所以 **cleanSessionFlag(清除会话)必须为false ** 由于我们要测试**中途被mqtt服务器踢掉后的效果**,所以**示例使用的我的mqtt服务器**,您如果有兴趣测试这个的话请修改配置信息为您的服务器 要测试的功能如下图。都是发送20条消息。  ## 2、测试发布QOS1 / QOS2消息 #### 网络正常情况发送,发送qos1消息 打印日志上面红框表示RyanMqtt发布了多少条消息也就是 **RyanMqttPublish 接口回复ok的次数**,下面表示**真正完成发布了多少条**  emqx截图,可以看到是20条。但细心的你肯定发现了发送的信息居然不是按顺序来的,这是因为emqx设置订阅的qos2主题,实际显示将会按照qos2完成时间来进行显示  #### 网络正常情况发送,发送qos2消息   #### 模拟发送中途断网,发送qos1消息 ***这里模拟的意思是:发送第5条的时候把网络硬件进行关闭,发送第10条时启动网络硬件,观察发布消息和实际消息是否对得上号***  ***看上面日志咱们发送了12条,emqx为什么会收到13条呢?*** 这就是qos1的特性了,**允许至少一次的重复接收**,咱们断网重新连接的时候根据qos1的特性咱们是可以重新发送的。  #### 模拟发送中途断网,发送qos2消息 ***这里模拟的意思是:发送第5条的时候把网络硬件进行关闭,发送第10条时启动网络硬件,观察发布消息和实际消息是否对得上号*** 这里我们就遇到了开头说的ec800m驱动问题,qos2需要较多的网络交互,**ec800直接罢工**了。 但是等它重连后我们可以发现,**qos2的消息依然可以稳定保证只有一次**。(之前我自己进行的测试要比这严谨的多,会考虑到多次断网情况等)   #### 模拟发送中途被踢,发送qos1消息 ***模拟中途被踢:发送20条,在中间的时候手动通过mqtt管理后台把RyanMqtt客户端踢掉*** 这个测试真考验手速啊,试了4次才成功😬。 可以看到发送到15条的时候被mqtt服务器给踢掉了,等待重连后可以正常同步   #### 模拟发送中途被踢,发送qos2消息 ***模拟中途被踢:发送20条,在中间的时候手动通过mqtt管理后台把RyanMqtt客户端踢掉*** 可以看到**发送了15条,但是收到了21条!是bug吗?**其实不然,这主要是**emqx服务器的策略问题**,因为是**主动剔除emqx服务器会清除会话上下文,导致qos2消息多接收**。 所以说重大风险的环境,**一定不要只依靠qos2**,太多因素会导致意料之外的结果。**一定要通过应用层来保证最终一致性**   ## 2、测试订阅QOS1 / QOS2消息 ***为了方便观察效果,我们使用emqx的脚本功能,给所有发送消息尾部加一个0 - 1000的随机值。方便观察消息接收情况。*** 脚本如下  #### 网络正常情况接收,接收qos1消息   #### 网络正常情况接收,接收qos2消息   #### 模拟接收中途断网,接收qos1消息 ***实验条件:使用mqttx上位机发布10条消息,RyanMqtt收到第5条后重启网络硬件,看联网后是否可以接收到消息***   #### 模拟接收中途断网,接收qos2消息 ***实验条件:使用mqttx上位机发布10条消息,RyanMqtt收到第5条后重启网络硬件,看联网后是否可以接收到消息***   #### 模拟接收中途被踢,接收qos1消息 #### 模拟接收中途被踢,接收qos2消息 ***实验条件:我使用mqttx的自动发送功能,一秒发一条。发送20条消息,当发送5 - 10条后从emqx服务器剔除RyanMqtt客户端*** 尴尬的发现没法测试,上面测试发布消息剔除的时候说过**emqx服务器的剔除会清除会话信息**,清除后会话信息,虽然RyanMqtt依然保留着订阅主题信息,但是emq服务器的订阅信息不存在了。 所以**不管有没有使能clearSession,都非常推荐在连接成功回调函数中订阅主题** ## 3、总结 这篇文章简单测试了RyanMqtt的消息质量稳定性,但依然很基础。 真实的网络环境可能会具复杂,欢迎有兴趣的同学进行测试
21
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
Ryan_CW
这家伙很懒,什么也没写!
文章
9
回答
74
被采纳
16
关注TA
发私信
相关文章
1
umqtt 软件包使用后,连接上emqx服务器,过一会儿就掉线了
2
使用正点原子的 潘多拉 开发板 的例程19_iot_mqtt
3
mqtt软件包,不支持直接关闭?
4
kawaii_mqtt 申请内存崩溃
5
_signal_entry() 函数中dbg_enter在哪里定义呢?
6
start to connect mqtt server 失败
7
MQTT 在“ read 0:1, break “后断开重连
8
paho_mqtt线程相关疑问
9
RT thread studio kawaii mqtt 无法连接EMQ
10
调试bc26 ,断言错误failed at rt_thread_timeout
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
rt-smart
RTC
FAL
I2C_IIC
cubemx
ESP8266
UART
WIZnet_W5500
ota在线升级
PWM
BSP
flash
freemodbus
packages_软件包
潘多拉开发板_Pandora
GD32
定时器
ADC
flashDB
编译报错
socket
中断
rt_mq_消息队列_msg_queue
keil_MDK
Debug
SFUD
ulog
msh
C++_cpp
MicroPython
本月问答贡献
RTT_逍遥
4
个答案
2
次被采纳
踩姑娘的小蘑菇
4
个答案
1
次被采纳
a1012112796
2
个答案
1
次被采纳
聚散无由
2
个答案
1
次被采纳
加缪
1
个答案
1
次被采纳
本月文章贡献
出出啊
1
篇文章
2
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
3
次点赞
crystal266
2
篇文章
1
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部