I am using the moquette mqtt broker, and I am trying to understand the implementation as well as the MQTT broker. I hope to make some modifications to the broker for a personal project.
I am curious what should happen when a device sends a PUBLISH msg to the broker, and the broker is unable to deliver the message to the subscribers. The protocol says that a PUBACK is sent back to the publisher. In the moquette source code this PUBACK seems to be sent after forwarding the message to any subscribers.
I commented out the sendPubAck() function to simulate that the message was not successfully published, so I assumed the publisher would publish the message again. However, when I add a print statement next to the incoming message handler function, I only see PINGREQ messages that are sent periodically from the publisher to the broker. I do not see any publish messages.
My question is the following: How exactly does a client device decide when to re-publish a message? Because commenting out the sendPubAck() function doesnt seem to make the publisher resend the message.