0

我将 MQTT 与 QOS 1 一起使用。

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

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

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

更新:我刚刚在消费者第二次开始时没有订阅就对其进​​行了测试。那也行不通。所以订阅并不是消费者收不到消息的原因。

4

1 回答 1

1

对于持久化会话,让你在离线时成为所有消息,你需要满足一些条件:

1)在连接时关闭 CleanStart:

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

2)收集与发布连接的剩余消息

  mqttClient.publishes(MqttGlobalPublishFilter.REMAINING) {
        mqtt5Publish -> handleMessage(mqtt5Publish.topic.toString(), mqtt5Publish.payload.decodeContent())
    }

3) 服务质量 1+

这就像一块瑞士手表。

于 2020-04-15T10:09:08.947 回答