先决条件–消息队列遥测传输协议(MQTT)
服务质量(QoS)级别:
服务质量是客户与经纪人之间达成协议的水平。此级别可帮助客户确保其邮件传递的可靠性。
共有3个QoS级别:
- QoS 0:至多一次–
当消息以QoS级别0发布时,该消息将最多传送一次。换句话说,不能保证邮件将被传递或不传递。如果已交付,则将最多交付一次。在此QoS级别中,发送方仅将消息发布一次,然后丢弃该消息。在这种情况下,无需等待确认。因此,如果网络断开,则可能无法传递该消息。如果网络稳定,则将仅传递一次消息。图– QoS级别0 什么时候使用?
- 在开发可以承受少量消息损失的应用程序时。
- 在开发具有可靠基础网络的应用程序时,使仅发布一次的消息就可以成功传递。
在上图中,Broker仅从发布者客户端接收单个PUBLISH消息。
- QoS 1:至少一次–
当消息以QoS级别1发布时,消息将至少传递一次。
在此QoS级别中,发送方发布消息并存储它,直到从接收方收到确认为止。一旦收到确认,发送方将丢弃该消息。如果未及时收到确认,则将再次发送该消息。因此,在此QoS级别中,可以一次甚至有时不止一次地传递消息,以确保其成功传递。图– QoS级别1 什么时候使用?
- 在开发无法承受消息丢失的应用程序时。
- 在开发可以处理重复消息传递的应用程序时。
- 在开发不需要额外通信成本的应用程序时。
- 在开发应用程序时,它们没有非常可靠的基础网络,因此需要在协议级别实施可靠性措施。
在上图中,Broker接收PUBLISH消息,并将PUBACK发送回发布者客户端。
- QoS 2:恰好一次–
当客户端以QoS级别2发布消息时,该消息将被准确地传递一次。在此QoS级别中,发送方发布消息,将其存储,然后等待PUBREC。接收者在收到消息后将PUBREC发送给发送者。 PUBREC表示消息已成功传递到接收者。因此,在接收到PUBREC之后,该消息将被发送方丢弃。然后,它将PUBREL发送到接收器。在接收到PUBREL时,接收器会丢弃已保存的状态并发送PUBCOMP。当发送方收到最终的PUBCOMP时,它还将丢弃以前保存的状态。因此,在QoS级别2中,用于通信的其他消息可确保一次成功成功地传递消息。图– QoS级别2 什么时候使用?
- 在开发要求每条消息准确传递一次的应用程序时。
- 在开发能够负担额外通信成本的应用程序时。
- 在开发应用程序时,它们没有非常可靠的基础网络,因此需要在协议级别实施可靠性措施。
在上图中,代理接收PUBLISH,发送PUBREC,接收PUBREL,然后将PUBCOMP发送到发布者客户端。
发布者和订阅者QoS级别之间的区别:
发布者客户端(发送者)和代理(接收者)之间的消息通信的QoS级别将由消息的发布级别决定。代理(发送者)和订户客户端(接收者)之间的消息通信的QoS级别将由客户端订阅主题的级别决定。通信的总体QoS级别等于代理程序两侧的两个QoS级别中的最小值。此总体级别确定发布者客户端和订阅者客户端之间消息传递的保证。
Publisher Client QoS Subscriber Client QoS Overall Qos for the Communication 0 0 0 0 1 0 0 2 0 1 0 0 1 1 1 1 2 1 2 0 0 2 1 1 2 2 2