MQTT允许发送方设置服务质量(QoS)级别,该级别为是否将接收消息(以及是否允许重复)提供了一定的保证。 HiveMQ的这篇文章着重介绍了降级的问题,在该问题中,具有较低QoS级别的客户端将无法接收到消息,并保证了发件人请求:


如前所述,QoS流发布客户端和订阅客户端之间有两个不同的方面,QoS也可能不同。这意味着QoS级别可能不同于发布消息的客户端A和接收发布消息的客户端B。在发送方和代理之间,QoS由发送方定义。当代理向所有订阅者发送消息时,将使用来自客户端B的订阅的QoS。


MQTT是否提供一种方法来表明这种降级是不可接受的,并且消息必须使用原始发件人请求的QoS进行传递吗?是唯一的选择,以确保发送方和接收方在发送消息之前都具有所需的QoS设置吗?

#1 楼

使用MQTT时要记住的一件事是“订户和发布者均被视为MQTT客户端”。

如上所述,发布时设置的QoS完全与代理(B)有关,而不与其他客户端有关。因此,要确保订户S收到发布者P正在发布的所有内容,需要使用QoS1。

让我们看一下情况:
P-发送QoS 0意味着每条消息最多在B处(一次或为零)。
在这种情况下,如果S以QoS 0订阅B,即使经纪人(B)收到一条消息,也无法保证最终将到达S。
QoS 1 – S肯定会收到
QoS 2 – S不会收到多条消息,而代理可以接收

如果我们对其他QoS进行相同处理。我们将了解订户的QoS1在所有级别上都可以很好地工作,因为QoS 1是所有集的超集。


MQTT没有提供相同的任何指示,但是我们可以通过使用来实现发送者的QoS。订阅时QoS1。

#2 楼

QoS 1或2级别仅确保发布的消息到达代理。订户QoS 1或2向经纪人保证已收到消息。

以1或2发布并不意味着有人在监听。

您的用例是什么?

评论


不要在答案中提出问题。如果不清楚,请先发表评论。

– Bence Kaulics
16年12月13日在8:28

我对任何情况都感到好奇,在这种情况下,可能会有一个传感器将数据发送到消息代理,然后将其转发到计算机或某些其他处理器,而保证QoS保证至关重要。

–Aurora0001♦
16 Dec 13 '15:58