【发布时间】:2021-07-08 22:34:28
【问题描述】:
我有一个订阅多个主题的 MQTT 客户端。我设置了 clean session false 和 QoS 1 所以当我离线时,消息将被排队。
但是每次我上网时,我都会在 init 函数中订阅相同的主题和相同的标志。会不会有什么问题?
【问题讨论】:
标签: mqtt
我有一个订阅多个主题的 MQTT 客户端。我设置了 clean session false 和 QoS 1 所以当我离线时,消息将被排队。
但是每次我上网时,我都会在 init 函数中订阅相同的主题和相同的标志。会不会有什么问题?
【问题讨论】:
标签: mqtt
每次我上网时,我都会在 init 函数中使用相同的标志订阅相同的主题。会不会有什么问题?
如果服务器接收到包含与现有订阅的主题过滤器相同的主题过滤器的订阅数据包,则它必须用新订阅完全替换现有订阅。新订阅中的主题过滤器将与之前订阅中的相同,尽管其最大 QoS 值可能不同。必须重新发送与主题过滤器匹配的任何现有保留消息,但不得中断发布流 [MQTT-3.8.4-3]。
MQTT V5的情况类似:
如果服务器接收到包含与当前会话的非共享订阅的主题过滤器相同的主题过滤器的 SUBSCRIBE 数据包,则它必须用新的订阅替换现有的订阅 [MQTT-3.8.4-3] .新订阅中的主题过滤器将与之前订阅中的相同,尽管其订阅选项可能不同。如果保留处理选项为 0,则必须重新发送与主题过滤器匹配的任何现有保留消息,但不得由于替换订阅 [MQTT-3.8.4-4] 而丢失应用程序消息。
因此,订阅客户端已经订阅的主题(具有相同的 QOS 等)不会导致任何问题(您可能会收到保留的消息)并且是一种常见模式(例如 this 和 this)。
【讨论】: