热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MQTT每次断连重连后重复接收到消息【retain属性】

问题:设备与服务器进行通信期间,不断重新配网。与嵌入式联调过程中发现每次取消订阅再重新订阅后,会重复接收到一条消息。上图为Paho软件测试

问题:设备与服务器进行通信期间,不断重新配网。与嵌入式联调过程中发现每次取消订阅再重新订阅后,会重复接收到一条消息。MQTT每次断连重连后重复接收到消息
上图为Paho软件测试结果。MQTT测试软件下载地址:
Paho:https://pan.baidu.com/s/1WkiR60EVz6LZQ-NNwyd6MQ
mqtt.fx:https://pan.baidu.com/s/130giQTKQhwSp4qeWKisrrA

收到该条信息解析后解密发现此条信息为更换网络指令,故设备不停断网进行重新配网。

所以我们要解决的问题为:MQTT每次断连重连后重复接收到消息。

经排查后解决办法:


  •  发布消息时把retain设置为false
  •  删除retain消息,可以发布一个空的retain消息(因为每个新的retain消息都会覆盖最后一个retain消息)

测试如下:
MQTT每次断连重连后重复接收到消息
MQTT之保留消息Retained Messages


  •  保留消息定义:

如果 publish消息的retain标记位被设置为1,则称该消息为“保留消息”


Broker对保留消息的处理Broker会存储每个Topic的最后一条保留消息及其Qos,当订阅该Topic的客户端上线后,Broker需要将该消息投递给它。
publish消息时,如果retain值是true,则服务器会一直记忆,哪怕是服务器重启。


  •  保留消息的删除:

1. 发送空消息体的保留消息
2. 发送最新的保留消息覆盖之前的


《springboot集成MQTT,生产者+消费者+MQTT.FX辅助测试》mqtt代码参见之前博客:https://blog.csdn.net/wfanking/article/details/82658393


推荐阅读
author-avatar
狮子小刚刚
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有