MQTT保留消息说明 「非原创」转载

1 篇文章 0 订阅

MQTT 定义了三个 QoS 等级,分别为:

QoS 0,最多交付一次。
QoS 1,至少交付一次。
QoS 2,只交付一次。
其中,使用 QoS 0 可能丢失消息,使用 QoS 1 可以保证收到消息,但消息可能重复,使用 QoS 2 可以保证消息既不丢失也不重复。QoS 等级从低到高,不仅意味着消息可靠性的提升,也意味着传输复杂程度的提升。

MQTT保留消息说明

【请教】MQTT如何清除PUBLISH到某TOPIC的RETAIN=TRUE的数据

解决办法:向该topic重新publish数据,RETAIN=TRUE,Payload为空。

http://www.steves-internet-guide.com/mqtt-retained-messages-example/

MQTT-保留的消息,图标通常,如果发布者向主题发布消息,并且没有人订阅该主题,则该消息将被代理放弃。

但是,发布者可以通过 设置保留的消息标志 来告诉代理保留该主题的最后一条消息。

这可能非常有用,例如,如果您的传感器仅在更改时发布其状态,例如门传感器。如果新订户订阅此状态会怎样?

如果没有 保留的消息,订户将不得不在收到消息之前等待状态改变。

然而,对于保留的消息,订户将看到传感器的当前状态。

重要的是要理解 每个主题 保留 一条消息。

在该主题上发布的下一条消息将替换该主题的最后一条保留消息。

MQTT保留消息示例概述

在本教程中,我们将使用Python脚本来发布和订阅消息。

然后,我们将检查保留消息如何与各种标志QOS设置一起使用。

需要注意的重要一点是,我们将在客户订阅之前发布消息。
您还应该注意我使用干净的会话以避免混淆。如果您不使用干净会话,那么您可能会看到已存储但未保留的消息!

基本过程是这样的:

发布有关未设置保留消息标记的主题的消息,并进行设置
订阅主题消息
监控收到的消息并分析结果
我们还将查看发布多条消息以及如何删除或删除保留的消息

参考下面的屏幕截图:

示例1 - 未设置保留消息标志,并且新订户未收到消息,即未收到消息。

示例2 - 设置恢复消息标志,并且新订户获得消息接收消息所指示的最后消息。

示例3 - 保留消息标志设置,我们发布多个消息OFF,OFF2,OFF3。但是,新订户仅获取最后一条消息OFF3。

在这里插入图片描述

QOS设置和保留的消息以及删除保留的消息

下面的屏幕截图显示了4个连接示例以演示QOS效果,然后我们如何删除保留的消息。

示例1:我们通过将QOS设置为0来检查QOS设置是否有效。我们看到仍然收到保留的消息,并且已发布消息的QOS无效。

示例2:现在我们尝试通过将保留消息标志设置为False来删除保留的消息。但是我们注意到他的消息仍然保留。

示例3:现在我们将消息设置为空白,但将保留的消息标志保持为False。消息仍然保留。

示例4 :最后,我们将消息设置为空白,并将retain标志设置为true,以清除保留的消息。

在这里插入图片描述

下表是一个摘要,显示了QOS,干净会话标志和保留消息标志如何影响新订户接收主题的消息。
在这里插入图片描述

MQTT的QoS-保持清洁的会话表
注意:处理保留标志的一些方面是依赖于代理实现的。

Python代码

使用保留标志集发布的代码是:

client.publish(“bulb1”,“test message”,qos = 0,retain = True

哪里:

topic = bulb 
nessage = test mesage 
QOS = 0 
Reatained message Flag = True

检测保留的消息

当您订阅具有保留消息的主题时,该消息将被传递到您的客户端。

客户机可以检测是通过检查一个保留的消息message.retain标志在上消息回调如显示在下面的代码片断:

def on_message(client,userdata,message):
    print(“收到消息”,str(message.payload.decode(“utf-8”)),\
          “topic”,message.topic,“retain”,message.retain)
    if message.retain == 1print(“这是保留的消息”)

脚本

我创建了一个Python脚本,它将清除一组主题上保留的消息,并报告保留消息的主题。请参阅MQTT保留消息工具-Python脚本

发布视频

这是我创建的视频,其中包含发布消息,还显示了保留标志的使用。感谢任何反馈。

常见问题和解答

问:如何删除或删除保留的消息?

A-发布空白消息,并将retain标志设置为true,以清除保留的消息。

问题 - 消息的QOS是否对保留的消息有影响?

答 - ,不。

问:我如何知道如果邮件被保留?

答 - 您只知道订阅主题的时间并检查保留的标志。

:如果我订阅主题并收到保留的消息,那么代理/服务器会删除该消息吗?

- 不会。它会保留,并在订阅时设置为新客户。

:如何删除或清除Mosquitto上所有保留的消息?

A-如果您 没有 使用 持久性数据库,那么最简单的方法是停止并重新启动mosquitto。否则,您需要订阅所有主题以检查并清除保留的消息。您可以使用我的Python脚本来执行此操作。但是,不建议在繁忙的经纪人处使用。

何时使用保留的消息

通常,当消息包含持久数据时,您将发布带有保留标志的消息。

例如,传感器可以发布关于其自身的信息,例如固件版本号,IP地址,当前状态。

此信息不太可能更改,因此您只需使用retain标志发布一次,任何新客户端都可以检索该信息。

有关传感器主题和属性的信息,请参阅Homie约定。

摘要

所述已保留消息的特征是保持的物体的最后状态有用的功能,并且是特别有用的,当状态不经常变化。

服务质量设置不会影响保留的消息

MQTT按示例系列

持久连接 - 示例
最后遗嘱和遗嘱 - 例子
用户名和密码验证 - 示例
MQTT以身作则
测验 - 测试保留消息,干净会话和最后消息的知识

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值