Reputation: 476
I use MQTT with QOS 1.
I have a consumer and a producer. They communicate with each other (HiveMQ as a client). They use VerneMQ as a broker. I use a persistence session.
If a consumer is offline and he goes later online, he should become all messages where he was offline. But that works only if consumer is on the other computer and I don't stop a micro service, but I turn off a WiFi and then turn it on. But if I shut down a micro service and then start it again that doesn't work with offline messages.
I think that's why it subscribes again on that topic, if I start a micro service again. Is it the reason? Or not?
UPDATE: I've just tested it without subscribing at the second start of the consumer. That doesn't work either. So subscribing is not the reason why the consumer doesn't get the messages.
Upvotes: 0
Views: 1348
Reputation: 476
For persistence session, so that you become all messages when you were offline, you need some conditions to be satisfied:
1) turn off CleanStart on connect:
Mqtt5Connect.builder()
.cleanStart(false)
.noSessionExpiry()
.build()
2) collect remaining messages on connect with publishes
mqttClient.publishes(MqttGlobalPublishFilter.REMAINING) {
mqtt5Publish -> handleMessage(mqtt5Publish.topic.toString(), mqtt5Publish.payload.decodeContent())
}
3) QOS 1+
That goes like a Swiss watch.
Upvotes: 1