MQTT 클라이언트는 일부 유형의 QoS 수준을 사용할 수 있으며, 각 수준은 메시지가 예상대로 처리되었는지 확인하기 위해 다른 수준에서 작동합니다.
다음 QoS 수준이 있습니다:
mtqsAtMostOnce: (기본값) 메시지는 기본 TCP/IP 네트워크의 최선의 노력에 따라 전달됩니다. 응답이 예상되지 않으며 프로토콜에 재시도 의미가 정의되어 있지 않습니다. 메시지는 서버에 한 번 도착하거나 전혀 도착하지 않습니다.
mtqsAtLeastOnce: 서버의 메시지 수신은 ACKNOWLEDGMENT 메시지로 확인됩니다. 통신 링크 또는 송신 디바이스에서 식별된 실패가 있거나 acknowledgement 메시지가 지정된 시간 후에 수신되지 않으면 송신자가 메시지를 다시 보냅니다. 메시지는 서버에 적어도 한 번 도착합니다. QoS level 1의 메시지에는 메시지에 ID 매개변수가 있습니다.
mtqsExactlyOnce: 메시지가 정확히 한 번 도착하도록 보장됩니다. 이 레벨은 예를 들어 중복 또는 손실된 메시지가 잘못된 청구로 이어질 수 있는 청구 시스템에 사용될 수 있습니다. 통신 링크나 송신 장치 중 하나에 식별된 장애가 있거나 지정된 시간 후에도 확인 메시지가 수신되지 않으면, 송신자는 메시지를 다시 전송합니다.
OnPubAck 또는 OnPubComp 이벤트를 처리하여 메시지가 서버에서 처리되었는지 알 수 있으며, 또는 PublishAndWait 메서드를 사용하여 메시지가 서버에서 처리되었는지 알 수 있습니다.
PublishAndWait의 사용법은 일반 Publish 메서드와 동일하지만, 이제 Timeout이라는 새 매개변수가 있어 일정 시간이 지난 후에도 서버로부터 응답이 없으면 메서드가 false를 반환합니다. 기본적으로 이 값은 10초입니다.
if mqtt.PublishAndWait('topic', 'text') then
ShowMessage('Message processed')
else
ShowMessage('Message error');