我将MQTT与QOS 1一起使用。
我有一个消费者和一个生产者。它们相互通信(HiveMQ作为客户端(。他们使用VerneMQ作为经纪人。我使用持久性会话。
如果一个消费者处于离线状态,并且稍后又处于在线状态,那么他应该成为离线状态下的所有消息。但只有当消费者在另一台电脑上,并且我没有停止微服务,但我关闭了WiFi,然后打开它时,这才有效。但如果我关闭了微服务,然后重新启动,离线消息就不起作用了。
我想这就是为什么如果我再次启动微服务,它会再次订阅该主题。是原因吗?还是不?
更新:我刚刚测试了它,但没有在消费者第二次启动时订阅。这也不起作用。因此,订阅并不是消费者没有收到消息的原因。
对于持久性会话,为了在脱机时成为所有消息,您需要满足一些条件:
1(在连接时关闭CleanStart:
Mqtt5Connect.builder()
.cleanStart(false)
.noSessionExpiry()
.build()
2(在连接发布时收集剩余消息
mqttClient.publishes(MqttGlobalPublishFilter.REMAINING) {
mqtt5Publish -> handleMessage(mqtt5Publish.topic.toString(), mqtt5Publish.payload.decodeContent())
}
3(QOS 1+
这就像一块瑞士手表。