What is an Mqtt 'session'?
In creating an Mqtt client connection using the class AwsIotMqttConnectionBuilder, I encounter a configuration setting called "withCleanSession(boolean)" that is described in the documentation this way:
/**
* Configures whether or not the service should try to resume prior
* subscriptions, if it has any
*
* @param cleanSession true if the session should drop prior subscriptions when
* a connection from this builder is established, false to resume the session
* @return {@link AwsIotMqttConnectionBuilder}
*/
public AwsIotMqttConnectionBuilder withCleanSession(boolean cleanSession) {
this.config.setCleanSession(cleanSession);
return this;
}
What is the meaning of "session" in this context? Is a session something that is local to one computer, or is it a state stored on the network somewhere? Is the client ID of the connection related to its state?
Please see here: https://docs.aws.amazon.com/iot/latest/developerguide/mqtt.html#mqtt-persistent-sessions
Persistent sessions store a client’s subscriptions and messages, with a quality of service (QoS) of 1, that have not been acknowledged by the client. When a disconnected device reconnects to a persistent session, the session resumes, its subscriptions are reinstated, and subscribed messages received prior to the reconnection and that have not been acknowledged by the client are sent to the client.
And: https://docs.aws.amazon.com/iot/latest/developerguide/sdk-tutorials.html
The message broker receives messages from devices and publishes messages to devices that have subscribed to them. With persistent sessions —sessions that remain active even when the initiating device is disconnected—devices can retrieve messages that were published while they were disconnected. On the device side, MQTT supports Quality of Service levels (QoS) that ensure the host receives messages sent by the device.
Is the client ID of the connection related to its state?
Yes, the Client ID is used to identify which session to resume.
Relevant questions
What is an Mqtt 'session'?
Accepted Answerasked 4 months agoCan I create an MQTT message that will be delivered only once?
asked 4 months agoIoT Core is not an MQTT broker?
Accepted Answerasked 3 years agoMQTT disconnects constantly
asked 5 years agoIs there a limitation on the number of topics in IoT Core?
Accepted Answerasked 2 years agoIOTCore TLS connection overhead too large. Is it possible to resume a session?
asked 4 months agoSetting up DCV connection gateway and a Session Resolver with the url that is not at the root?
asked 2 months agoIs there an event for game session termination?
Accepted Answerasked 4 months agoIssue concating policy variables with a string in an iot policy's resource block
Accepted Answerasked 5 months agoIs there an option to persist MQTT offline messages to disk?
Accepted Answerasked 2 years ago
Thanks for the response. I think the source of my problem was that I had created multiple clients with the same Client ID and that was causing issues. Once I gave each client a unique ID things worked as expected.