使用mqtt QoS 2发布消息时,是否会丢失?

使用mqtt QoS 2发布消息时,是否会丢失?,mqtt,ios-mqtt-client-framework,Mqtt,Ios Mqtt Client Framework,我正在尝试使用实现MQTT客户机。我想确保我试图发布的每一条消息都能到达代理。我无法确切理解QOS2的含义:它表示一条消息将只发送一次。这是否意味着当连接丢失时,它会在重新连接后尝试自动重新传输消息?或者这应该由应用程序处理 在该库中,默认情况下自动完成重新连接?或者需要检查是否发生了connectionLost,然后尝试重新连接?MQTT QoS级别是向接收方传递消息的保证,而不是发送方发送/重新发送消息的频率。请参阅和 使用MQTT QoS2发布的消息意味着它将被传递一次。邮件可以多次发送,

我正在尝试使用实现MQTT客户机。我想确保我试图发布的每一条消息都能到达代理。我无法确切理解QOS2的含义:它表示一条消息将只发送一次。这是否意味着当连接丢失时,它会在重新连接后尝试自动重新传输消息?或者这应该由应用程序处理


在该库中,默认情况下自动完成重新连接?或者需要检查是否发生了connectionLost,然后尝试重新连接?

MQTT QoS级别是向接收方传递消息的保证,而不是发送方发送/重新发送消息的频率。请参阅和

使用MQTT QoS2发布的消息意味着它将被传递一次。邮件可以多次发送,以实现一次送达保证

MQTT的至少一次交付方面是通过PUBLISH/PUBREC握手实现的。如果发布者未收到确认其已发布消息的PUBREC数据包,则将继续重新发送设置了DUP标志的发布消息

QoS2的精确一次交付方面是通过使用额外的PUBREL/PUBCOMP握手实现的。接收者可以选择转发消息并在发送时丢弃重复消息

这是否意味着当连接丢失时,它将尝试重新传输 是否在重新连接后自动显示消息?或者这应该是 由应用程序处理

MQTT规范包括:

当客户端在CleanseSession设置为0的情况下重新连接时,客户端和 服务器必须重新发送任何未确认的发布数据包(其中 >0)和使用其原始数据包标识符的PUBREL数据包。这是客户端或服务器 需要重新传递消息

因此,如果您的客户机遵循规范,并且您正在使用持久会话(CleanSession=0),那么消息将被重新传输