当前位置: 首页 > 知识库问答 >
问题:

MQTT QoS降级

莫乐
2023-03-14

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

如何克服这个严重的问题?本质上,我不能信任QoS2设置。

(注意,通常这不是问题,因为我可以用QoS 2发布消息。但是,当发布客户端不受您的控制,并且无法保证它们将使用哪种QoS时,这就成了问题。)

共有1个答案

龙永逸
2023-03-14

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

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

 类似资料:
  • 1 奇异值分解   在了解特征值分解之后,我们知道,矩阵A不一定是方阵。为了得到方阵,可以将矩阵A的转置乘以该矩阵。从而可以得到公式:   现在假设存在M*N矩阵A,我们的目标是在n维空间中找一组正交基,使得经过A变换后还是正交的。假设已经找到这样一组正交基:   A矩阵可以将这组正交基映射为如下的形式。   要使上面的基也为正交基,即使它们两两正交,那么需要满足下面的条件。   如果正交基v选择

  • 这里的 “降级” 是指以普通 Web 页面的模式渲染 Weex 的页面。 Weex 本身是支持跨三种平台的(Android、iOS、Web),在不同平台中集成不同版本的 SDK 来实现原生渲染,然而随着平台和应用版本的迭代,会出现版本碎片化的情况。如果你使用了较高版本中的特性,但是又无法升级已经存在的低版本 App,就可以使用“降级”的方式在低版本 App 中以普通 Web 页面的模式来渲染 触发

  • “降级” 通常是指以普通 Web 页面的模式渲染 Weex 的页面。 Weex 本身是支持跨三种平台的(Android、iOS、Web),在不同平台中集成不同版本的 SDK 来实现原生渲染,然而随着平台和应用版本的迭代,会出现版本碎片化的情况。如果你使用了较高版本中的特性,但是又无法升级已经存在的低版本 App,就可以使用“降级”的方式在低版本 App 中以普通 Web 页面的模式来渲染(在 We

  • 概述 除了流量控制以外,对调用链路中不稳定的资源进行熔断降级也是保障高可用的重要措施之一。一个服务常常会调用别的模块,可能是另外的一个远程服务、数据库,或者第三方 API 等。例如,支付的时候,可能需要远程调用银联提供的 API;查询某个商品的价格,可能需要进行数据库查询。然而,这个被依赖服务的稳定性是不能保证的。如果依赖的服务出现了不稳定的情况,请求的响应时间变长,那么调用服务的方法的响应时间也

  • 本节描述了旧版本MySQL比新版本工作得好的情况下,如何降级到旧的MySQL版本。 如果你在同一发布系列(例如,从 5.0.13 到5.0.12)内降级,一般规则是只需要在旧版本的顶部安装新的二进制。不需要对数据库进行任何操作。但是,最好是先进行备份。 下面的项列出了进行降级时应执行的操作: ·阅读你将要降级的发布系列的升级部分,确定它没有你需要的功能。2.10节,“升级MySQL”。 ·如果该版

  • 很多机器学习的问题都会涉及到有着几千甚至数百万维的特征的训练实例。这不仅让训练过程变得非常缓慢,同时还很难找到一个很好的解,我们接下来就会遇到这种情况。这种问题通常被称为维数灾难(curse of dimentionality)。 幸运的是,在现实生活中我们经常可以极大的降低特征维度,将一个十分棘手的问题转变成一个可以较为容易解决的问题。例如,对于 MNIST 图片集(第 3 章中提到):图片四周