MQTT istemcisi, bazı QoS seviyesi türlerinin kullanımına olanak tanır; bu seviyelerin her biri, mesajların beklendiği gibi işlendiğinden emin olmak için farklı bir seviyede çalışır.
Aşağıdaki QoS düzeyleri vardır:
mtqsAtMostOnce: (varsayılan) mesaj, temel TCP/IP ağının en iyi çabasına göre teslim edilir. Bir yanıt beklenmez ve protokolde yeniden deneme semantiği tanımlanmamıştır. Mesaj sunucuya ya bir kez ulaşır ya da hiç ulaşmaz.
mtqsAtLeastOnce: bir mesajın sunucu tarafından alınması bir ACKNOWLEDGMENT mesajıyla onaylanır. İletişim bağlantısında veya gönderen cihazda belirlenmiş bir arıza varsa ya da onay mesajı belirli bir süre sonra alınmazsa, gönderen mesajı yeniden gönderir. Mesaj sunucuya en az bir kez ulaşır. QoS düzey 1 olan bir mesajın mesajda bir ID parametresi vardır.
mtqsExactlyOnce: mesajların tam olarak bir kez ulaşacağının garanti edildiği yer. Bu seviye, örneğin yinelenen veya kaybolan mesajların yanlış ücretlerin uygulanmasına yol açabileceği faturalama sistemleriyle kullanılabilir. Ya iletişim bağlantısında ya da gönderen cihazda tanımlanmış bir arıza varsa veya onaylama mesajı belirli bir süre sonra alınmazsa, gönderen mesajı yeniden gönderir.
Mesajın sunucu tarafından işlenip işlenmediğini öğrenmek için OnPubAck veya OnPubComp olaylarını işleyebilirsiniz veya mesajın sunucu tarafından işlenip işlenmediğini öğrenmek için PublishAndWait yöntemini kullanabilirsiniz.
PublishAndWait kullanımı, normal Publish yöntemiyle aynıdır, ancak şimdi Timeout adlı yeni bir parametreniz vardır; burada yöntem, belirli bir süreden sonra sunucudan yanıt yoksa false döndürür. Varsayılan olarak bu değer 10 saniyedir.
if mqtt.PublishAndWait('topic', 'text') then
ShowMessage('Message processed')
else
ShowMessage('Message error');