MQTT每次断连重连后重复接收到消息

问题:设备与服务器进行通信期间,不断重新配网。与嵌入式联调过程中发现每次取消订阅再重新订阅后,会重复接收到一条消息。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

  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
您好!对于后台客户端频繁与 MQTT 服务器断连重连的问题,可能有几种原因导致。我会给出一些常见的解决方案,希望能对您有所帮助。 1. 检查网络连接:首先确保客户端与 MQTT 服务器之间的网络连接是稳定的,可以通过 ping 命令或其他网络测试工具来验证。 2. 处理心跳信号:MQTT 协议中有心跳机制,客户端需要定期发送心跳信号以维持与服务器的连接。您可以检查客户端是否正确实现了心跳机制,并且心跳间隔设置合理。 3. 优化重连策略:如果客户端与服务器的连接断开,您可以考虑优化重连策略。例如,可以使用指数退避算法来逐渐增加重连间隔时间,避免频繁重连对服务器造成压力。 4. 检查服务器配置:确保 MQTT 服务器的配置参数正确设置,包括最大连接数、最大消息数量等。如果超过了服务器的负载能力,可能会导致频繁的断连重连。 5. 处理异常情况:在客户端代码中处理异常情况是很重要的。例如,如果网络连接异常断开,可以尝试重新连接;如果连接失败多次仍无法建立连接,可以考虑进行错误处理或报警。 6. 使用保持持久连接的策略:保持持久连接是一种可行的解决方案。通过使用一个长时间持续的连接,可以避免频繁的连接断开操作。 希望以上解决方案能解决您遇到的问题。如果仍然存在问题,请提供更多的细节和错误日志,我将尽力帮助您解决。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值