首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MQTT QoS降级

MQTT QoS降级
EN

Stack Overflow用户
提问于 2016-08-17 22:42:54
回答 1查看 891关注 0票数 2

我正在嵌入式应用程序中使用MQTT。我已经详细地阅读了这些文档,并且了解了QoS特性是如何在MQTT中实现的,以及每个值的含义。

众所周知,MQTT降低了QoS的等级,这意味着消息将以发送方和接收方之间最低的QoS值传递。这是可以理解的,对于大多数发送和接收之间的QoS折算来说,这是有意义的。

不过,我对某一特定情况有异议。当客户端订阅QoS 2时,用QoS 1发布消息会发生什么?

消息将至少被传递一次给代理,这意味着它可能被传递不止一次。另一方面,订阅客户端希望它能够保证只接收一次消息,但情况并非如此。

如何才能克服这一严重问题?实际上,我不能信任QoS 2设置。

(请注意,这通常不是一个问题,因为我可以只使用QoS 2发布消息。但是,当发布客户端超出您的控制范围时,这将成为一个问题,并且无法保证他们将使用哪个QoS。)

EN

回答 1

Stack Overflow用户

发布于 2016-08-18 08:31:13

正如您已经指出的,当原始发送方使用QoS 1向代理发送消息时,消息可能会多次到达代理,这意味着代理也可以多次将此消息传递给(QoS 2)订阅者。由于第一条QoS 1消息与第二条消息之间的时间可能很长(如果原始发送方在原始发送之后离线,因此重发发生在稍后的时间点),因此很难在代理端为消息的订阅者提供准确的一次保证。

本质上,如果不能确保您只接收到QoS 2消息,请确保您的客户端能够处理副本。例如,您可以在应用程序有效负载中使用唯一标识符,以确保消息在业务级别上不是重复的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39007355

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档