Shifu教你轻松理解MQTT ——(4)服务质量QoS
2023/1/14 4:24:02
本文主要是介绍Shifu教你轻松理解MQTT ——(4)服务质量QoS,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
在阅读了***Shifu*** 此前发布的系列MQTT文章后,相信你已经对MQTT的QoS(Quality of Service,服务质量)有了个大概印象——用于指示如何传递消息;共有3个QoS级别和2种类型的消息。
Shifu是由边无际Edgenesis自主研发的物联网开源开发和管理平台,开发者通过Shifu可以轻松实现连接、监控和控制任何物联网设备。
快速回顾
3个QoS级别:
-
0-最多一次
-
1-至少一次
-
2-正好一次
2种交付方式:
-
发布者对中间人
-
中间人对订阅者
此外,在上一篇文章中,我们已经讨论了从订阅者发送至中间人的订阅消息;它定义了用户可以接受的最大QoS级别,任何具有更高级别的消息都将被降低至订阅该级别用户能承受的最大级别。
0-最多一次
我们常能通过事物的名字来判断它是做什么的。因此,如果你的QoS级别为0,则消息要么被传递一次,要么不传递——只尝试一次,并且不重试。发了就算完。哇,非常异步。
1-至少一次
假设我要传递某条信息,则会疯狂地进行重试。发送消息的人将继续重复发送消息,直到它从接收者那里收到PUBACK(由packetId组成,仅此而已)。
还记得我们在发布消息中的dupFlag字段吗?下面就来看看如何使用——在初次尝试后的每次重试中,这个dupFlag都会被设置为true,以此来通知收件人这可能是一条重复消息。
2-刚好一次
确保消息被传递,并且确保只传递一次。这是最慢也是最复杂的QoS级别。以下为QoS 2消息发送的整个生命周期:
首先,发送方(发布者或中间人)将发布消息发送给接收方(中间人或订阅者)。“咚咚!”
第二,一旦接收者收到发布消息,它就向发送者发送PUBREC消息,表示“我认出了这个消息,是QoS 2,以此句话为证,不要再发了!”在接收PUBREC之前,发送方仍然会不断重试向接收方发送带有dupFlag==true的发布消息。
第三,在收到PUBREC后,发送方便得知消息已经被传递。因为它知道QoS消息是正好一次,所以它将丢弃该消息并停止疯狂重试行为,然后将PUBREL发送给接收者,说“我保证我不会再发这条信息了。”
第四,当PUBREL到达时,接收方将PUBCOMP发送回发送方,生命周期结束。
这与我们在TCP中的握手方式非常相似——使用一些额外的步骤来确保所有利益相关者都知道当前状态。
如果无法访问接收方,发送方会将消息保存在本地队列中,以便在接收方在线时发送消息。
这篇关于Shifu教你轻松理解MQTT ——(4)服务质量QoS的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-21MQ-2烟雾传感器详解
- 2024-12-09Kafka消息丢失资料:新手入门指南
- 2024-12-07Kafka消息队列入门:轻松掌握Kafka消息队列
- 2024-12-07Kafka消息队列入门:轻松掌握消息队列基础知识
- 2024-12-07Kafka重复消费入门:轻松掌握Kafka消费的注意事项与实践
- 2024-12-07Kafka重复消费入门教程
- 2024-12-07RabbitMQ入门详解:新手必看的简单教程
- 2024-12-07RabbitMQ入门:新手必读教程
- 2024-12-06Kafka解耦学习入门教程
- 2024-12-06Kafka入门教程:快速上手指南