MQTT订阅主题就会收到消息的问题--Retained

MQTT订阅主题就会收到消息的问题–Retained

之前的项目使用了mqtt消息队列作为第三方消息的接收和发送,本地作为mqtt的订阅者也作为发送者。
本地本地接受到mqtt订阅的消息,作处理后再重新发送到云服务端。这里遇到一个坑(其实是自己造成的),在订阅主题后就会收到mqtt服务器发送的消息,查找资料后发现是在publish某条数据时,设置了Retained(默认是ture,这里选择后为false)。
在这里插入图片描述
详细资料可以查看https://blog.csdn.net/libaineu2004/article/details/78667726
大意是设置了Retained,那每次有客户端订阅该主题,就会发送你之前设置了Retained的publish的数据。
解决的办法就是再publish一条无数据的带Retained(false)的消息即可。
在这里插入图片描述
之后再publish就不要带Retained![在这里插入图片描述](https://img-blog.csdnimg.cn/20190530100013360.png
或者在代码里设置MqttMessage的Retained为false。

MQTT消息遗留问题主要涉及到两个方面:保留消息和遗嘱消息。 保留消息是指当客户端连接时,Broker存储每个Topic的最后一条保留消息及其QoS。当订阅该Topic的客户端上线后,Broker将该消息投递给它。保留消息的作用是让新订阅的客户端得到发布方的最新状态值,而不必等待新消息推送。但保留消息的弊端是,Broker保存的消息与断线重连接时收到的断线消息重复,并且每次重连时都投递一次。要删除保留消息,只需发送一条Retained为true,payload为空的消息即可解除。\[1\] 遗嘱消息是在客户端断线时发送的消息。它有四个参数:topic(预定发布的主题)、payload(遗嘱消息内容)、qos(遗嘱消息质量)和retained(遗嘱消息是否保留)。当客户端断线时,订阅主题的其他客户端都收到一条遗嘱消息。遗嘱消息的应用是在客户端连接时设置向指定主题发送遗嘱消息,以便在客户端断线时通知其他订阅者。\[2\] 遗嘱消息消息保留的应用中提到,保留消息的好处是当有新的连接订阅该topic时,Broker先发送保留消息给该连接,从而确保该连接立刻获取到topic上的消息。这样可以优化用户体验。然而,保留消息的坏处是由于保留消息一直存在,导致新的连接都获得该消息,如果该消息不是它们想要的,就存在污染。因此,一些人的做法是让发送方重新发送一个空的保留消息来覆盖原有保留消息。\[3\] 综上所述,MQTT消息遗留问题主要涉及到保留消息和遗嘱消息的使用和管理。保留消息可以让新订阅的客户端得到发布方的最新状态值,但可能导致重复投递。遗嘱消息可以在客户端断线时通知其他订阅者,但需要注意保留消息的污染问题。 #### 引用[.reference_title] - *1* *2* [SpringBoot 开发之 MQTT 协议遗嘱消息消息保留的应用](https://blog.csdn.net/myinsert/article/details/108360297)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [相机MQTT遗嘱消息发送异常分析](https://blog.csdn.net/weixin_39603492/article/details/119434437)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值