保留消息 - MQTT 核心:第八章

保留消息 - MQTT 核心:第八章

欢迎来到MQTT核心系列的第八章。这个系列一共有十章,用来介绍MQTT的核心特性和概念。在这章,我们将介绍保留消息。

在MQTT中,客户端是无法保障订阅方能确切收到消息的。发布方唯一能确认的是消息被安全的投送到了代理哪里。相应的,订阅方也面临着类似的问题。订阅方不知道下一次发布方推送消息是什么时候。可能是几秒之后,也可能几分,或者是几小时等。在发布方推送下一条消息前,订阅方都不知道此时主题是什么状态。在这种场景下,保留消息就该上场了。

保留消息

保留消息就是一个保留标志设置为true的普通消息。代理会把一个主题的最新的保留消息和它的服务质量存储起来。如果一个客户端订阅了这个主题,那么代理就会立刻发送这个保留消息。特别注意,代理只会为每个主题保留一条保留消息,也就是最新的该主题的保留消息。

其实一个订阅方靠通配符匹配上了某个主题,它也会收到保留消息。例如客户端A向主题myhome/livingroom/temprature推送了一个保留消息。客户端B订阅了myhome/#。那么客户端B在订阅成功后就会直接收到这条保留消息。

保留消息让新订阅的客户端能立刻收到一个状态更新,而不必等到下一次发布方推送消息

我们需要注意,保留消息不一定是最新的消息,它是最新的保留标志设置为true的消息。

还有一点很重要,那就是理解保留消息和持久化会话是没有关联的。一旦一个保留消息被存储在代理中,只有一种方法能移除它。现在让我们来看看该怎么做吧

发送一个保留消息

对于开发者来说,发送一个保留消息是非常简单的。你只需要将消息的保留标识符设置为true就可以了。通常,你的客户端库会提供简单的api你调用。

删除一个保留消息

有一种非常简单的方法来删除保留消息,那就是发送一个0byte负载的消息给那个你想删除原先保留消息的主题。这样代理就会删除保留消息,并且对于新订阅的客户端也不会再收到这个主题的保留消息。通常来说,删除保留消息是没有必要的,因为九地保留消息会被新的保留消息覆盖。

为什么以及何时你应该使用保留消息?

当你想新订阅的订阅方能立即收到一个消息时,保留消息就显得很有价值了(不需要等到下一次发布方推送消息)。这对一些特定主题的组件或者设备的状态更新是非常有帮助的。例如,设备1的状态在主题myhome/devices/device1/status上。当我们使用保留消息时,新订阅者会立即收到这个设备的状态(online/offline).类似的场景还有间隔,温度,GPS定位等。假如没有保留消息,那么新订阅者在新消息推送前将不知道对方是什么状态。但是用了保留消息,客户端将立即能获得最新的状态。


以上就是第8章所有的内容了。我们希望你能喜欢。在下一章中,我们将讨论一种叫做遗言的特性。这种特性能让客户端异常断连后发送最后的消息。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值