持久性会话在 MQTT 中如何工作?

How does persistence session work in MQTT?

我使用带有 QOS 1 的 MQTT。

我有一个消费者和一个生产者。它们相互通信(HiveMQ 作为 客户端)。他们使用 VerneMQ 作为 broker。我使用持久性会话。

如果一个消费者离线了,他后来又上线了,他应该成为他离线时的所有消息。但这只有在消费者在另一台计算机上并且我不停止微服务但我关闭 WiFi 然后再打开它时才有效。但是,如果我关闭一个微服务然后再次启动它,它就不能处理离线消息。

我认为这就是为什么它会再次订阅该主题,如果我再次启动微服务。是这个原因吗?或不?

更新: 我刚刚在消费者第二次启动时没有订阅就测试了它。那也不管用。 所以订阅不是消费者收不到消息的原因。

持久化session,让你在离线时变成所有消息,需要满足一些条件:

1) 在连接时关闭 CleanStart:

Mqtt5Connect.builder()
            .cleanStart(false)
            .noSessionExpiry()
            .build()

2) 在与 publishes

连接时收集剩余消息
  mqttClient.publishes(MqttGlobalPublishFilter.REMAINING) {
        mqtt5Publish -> handleMessage(mqtt5Publish.topic.toString(), mqtt5Publish.payload.decodeContent())
    }

3) 服务质量 1+

这就像一块瑞士手表。