订阅者的 MQTT 更高 QoS
MQTT higher QoS on subscriber
如果我有一个发布者使用 QoS 1(至少一次传递)向我的 MQTT 代理发送消息,而一个订阅者使用 QoS 2(恰好一次传递),订阅者是否仍然会收到重复的消息?
我担心的是发布者可能会向代理发送重复的消息(因为 QoS 1 声明这是可能的),然后代理会将它们全部视为不同的消息并将它们全部转发给订阅者。这就是 MQTT 代理的工作方式吗?或者他们是否足够聪明,可以意识到从发布者收到的重复消息都是一样的,然后只将其中一个转发给订阅者。
QoS 级别介于个人客户和经纪人之间。订阅者还请求 QoS 级别,代理授予订阅者订阅的 最大 QoS。
v3.1.1 的 MQTT 规范涵盖了这些不同的 QoS 级别如何与您在 section 3.8.4 中的示例相关:
The QoS of Payload Messages sent in response to a Subscription MUST be the minimum of the QoS of the originally published message and the maximum QoS granted by the Server.
订阅者在订阅主题时可能已被授予 QoS 2 的 最大值。但是原始发布者使用 QoS 1。因此订阅者可以收到原始发布者发送的消息的副本。
如果我有一个发布者使用 QoS 1(至少一次传递)向我的 MQTT 代理发送消息,而一个订阅者使用 QoS 2(恰好一次传递),订阅者是否仍然会收到重复的消息?
我担心的是发布者可能会向代理发送重复的消息(因为 QoS 1 声明这是可能的),然后代理会将它们全部视为不同的消息并将它们全部转发给订阅者。这就是 MQTT 代理的工作方式吗?或者他们是否足够聪明,可以意识到从发布者收到的重复消息都是一样的,然后只将其中一个转发给订阅者。
QoS 级别介于个人客户和经纪人之间。订阅者还请求 QoS 级别,代理授予订阅者订阅的 最大 QoS。
v3.1.1 的 MQTT 规范涵盖了这些不同的 QoS 级别如何与您在 section 3.8.4 中的示例相关:
The QoS of Payload Messages sent in response to a Subscription MUST be the minimum of the QoS of the originally published message and the maximum QoS granted by the Server.
订阅者在订阅主题时可能已被授予 QoS 2 的 最大值。但是原始发布者使用 QoS 1。因此订阅者可以收到原始发布者发送的消息的副本。