De MQTT-client ondersteunt het gebruik van bepaalde QoS-niveaus; elk van deze niveaus werkt op een ander niveau om te garanderen dat berichten zijn verwerkt zoals verwacht.
De volgende QoS-niveaus zijn beschikbaar:
mtqsAtMostOnce: (standaard) het bericht wordt afgeleverd volgens de best-effort van het onderliggende TCP/IP-netwerk. Er wordt geen antwoord verwacht en er zijn geen hertransmissiesemantiek gedefinieerd in het protocol. Het bericht arriveert bij de server één keer of helemaal niet.
mtqsAtLeastOnce: de ontvangst van een bericht door de server wordt bevestigd met een BEVESTIGINGSBERICHT. Als er een identificeerbare storing is in de communicatieverbinding of het verzendende apparaat, of als het bevestigingsbericht niet binnen een bepaalde periode wordt ontvangen, verzendt de afzender het bericht opnieuw. Het bericht arriveert minstens één keer op de server. Een bericht met QoS-niveau 1 heeft een ID-parameter in het bericht.
mtqsExactlyOnce: waarbij berichten gegarandeerd precies één keer aankomen. Dit niveau kan bijvoorbeeld worden gebruikt in factureringssystemen waar dubbele of verloren berichten tot onjuiste kosten kunnen leiden. Als er een geïdentificeerd falen is van de communicatieverbinding of het verzendende apparaat, of als het bevestigingsbericht niet wordt ontvangen na een bepaalde periode, stuurt de verzender het bericht opnieuw.
U kunt de gebeurtenissen OnPubAck of OnPubComp verwerken om te weten of het bericht door de server is verwerkt, of u kunt de methode PublishAndWait gebruiken om te weten of het bericht door de server is verwerkt.
Het gebruik van PublishAndWait is hetzelfde als de normale Publish-methode, maar nu hebt u een nieuwe parameter genaamd Timeout, waarbij de methode false retourneert als er na een bepaalde periode geen antwoord van de server is. Standaard is deze waarde 10 seconden.
if mqtt.PublishAndWait('topic', 'text') then
ShowMessage('Message processed')
else
ShowMessage('Message error');