Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
MQTT
原创征文
RyanMqtt QOS质量测试(二)
发布于 2023-09-28 14:51:06 浏览:383
订阅该版
[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的消息质量稳定性,但依然很基础。 真实的网络环境可能会具复杂,欢迎有兴趣的同学进行测试
20
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
Ryan_CW
这家伙很懒,什么也没写!
文章
9
回答
53
被采纳
12
关注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
机器人操作系统 (ROS2) 和 RT-Thread 通信
4
五分钟玩转RT-Thread新社区
5
国产MCU移植系列教程汇总,欢迎查看!
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
串口
LWIP
Env
AT
SPI
Bootloader
FinSH
ART-Pi
CAN总线
Hardfault
USB
文件系统
RT-Thread
DMA
SCons
线程
MQTT
RT-Thread Nano
STM32
RTC
rt-smart
ESP8266
flash
ota在线升级
WIZnet_W5500
FAL
I2C
packages_软件包
UART
cubemx
freemodbus
潘多拉开发板_Pandora
定时器
BSP
PWM
ADC
socket
中断
rt_mq_消息队列_msg_queue
keil_MDK
SDIO
Debug
AB32VG1
MicroPython
编译报错
C++_cpp
msh
ulog
QEMU
本月问答贡献
出出啊
1501
个答案
338
次被采纳
小小李sunny
1390
个答案
276
次被采纳
张世争
715
个答案
157
次被采纳
crystal266
522
个答案
153
次被采纳
whj467467222
1216
个答案
146
次被采纳
本月文章贡献
出出啊
1
篇文章
12
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
2
篇文章
2
次点赞
crystal266
2
篇文章
5
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部