MQTT 클라이언트가 제공하는 서비스 품질 (QoS)

MQTT 클라이언트는 IBM® MQMQTT 클라이언트에 발행물을 전달하는 것에 대해 세 개의 서비스 품질(QoS)을 제공합니다("최대 한 번", "최소 한 번" 및 "정확히 한 번"). MQTT 클라이언트가 구독을 작성하기 위해 IBM MQ 에 요청을 전송할 때 요청은 "적어도 한 번" 서비스 품질 (QoS) 로 전송됩니다.

발행의 서비스 품질은 MqttMessage의 속성입니다. 이 속성은 MqttMessage.setQos 메소드로 설정됩니다.

메소드 MqttClient.subscribe는 토픽에서 클라이언트에 송신된 발행에 적용된 서비스 품질을 낮출 수 있습니다. 구독자에게 전달된 발행의 서비스 품질은 발행의 서비스 품질에 따라 달라질 수 있습니다. 두 값 중 낮은 값이 발행물을 전달하는 데 사용됩니다.

최대 한 번
QoS=0
  • 메시지는 최대 한 번 전달되거나 전혀 전달되지 않습니다. 이 네트워크 간 전달은 수신확인되지 않습니다.
  • 메시지는 저장되지 않습니다. 클라이언트 연결이 끊어지거나 서버가 실패하는 경우 메시지는 손실될 수 있습니다.
  • QoS=0은 가장 빠른 전송 모드입니다. 이 모드는 "실행 후 삭제"라고도 합니다.
  • MQTT protocol 에서는 서버가 QoS=0 에 있는 발행물을 클라이언트에 전달할 필요가 없습니다. 서버가 발행물을 수신할 때 클라이언트 연결이 끊어지는 경우 서버에 따라 발행물을 제거할 수 있습니다. 텔레메트리(MQXR) 서비스에서는 QoS=0으로 송신된 메시지를 제거하지 않습니다. 해당 메시지는 비지속 메시지로 저장되고 큐 관리자가 중지되는 경우에만 제거됩니다.
최소 한 번
QoS=1
  • QoS=1은 기본 전송 모드입니다.
  • 메시지는 항상 최소 한 번 전달됩니다. 송신자가 수신확인을 수신하지 않는 경우, 메시지는 수신확인이 수신될 때까지 DUP 플래그가 설정되어 다시 송신됩니다. 따라서 수신자에게 동일한 메시지가 여러 번 전송되고 이를 여러 번 처리할 수도 있습니다.
  • 메시지가 처리될 때까지 송신자와 수신자는 메시지를 로컬에 저장해야 합니다.
  • 메시지는 처리된 후에 수신자로부터 삭제됩니다. 수신자가 브로커인 경우, 메시지는 구독자에게 발행됩니다. 수신자가 클라이언트인 경우 메시지는 구독자 애플리케이션에게로 전달됩니다. 메시지가 삭제된 후 수신자는 송신자에게 수신확인을 송신합니다.
  • 수신자로부터 수신확인을 받고 나면 송신자로부터 메시지가 삭제됩니다.
정확히 한 번
QoS=2
  • 메시지는 항상 정확히 한 번만 전송됩니다.
  • 메시지가 처리될 때까지 송신자와 수신자는 메시지를 로컬에 저장해야 합니다.
  • QoS=2는 가장 안전하지만 가장 느린 전송 모드입니다. 메시지가 송신자에서 삭제되기 전에 송신자와 수신자 사이에 최소 두 쌍의 전송이 발생합니다. 메시지는 첫 번째 전송 후에 수신자 측에서 처리될 수 있습니다.
  • 첫 번째 전송 쌍에서 송신자는 메시지를 전송하고 수신자에게서 메시지를 저장했다는 수신확인을 받습니다. 송신자가 수신확인을 수신하지 않는 경우, 메시지는 수신확인이 수신될 때까지 DUP 플래그가 설정되어 다시 송신됩니다.
  • 두 번째 전송 쌍에서 송신자는 수신자에게 메시지 PUBREL의 처리를 완료할 수 있다고 전달합니다. 송신자가 PUBREL 메시지의 수신확인을 수신하지 않은 경우 수신확인이 수신될 때까지 PUBREL 메시지가 다시 송신됩니다. 송신자는 PUBREL 메시지에 대한 수신확인을 수신하면 저장했던 메시지를 삭제합니다.
  • 메시지를 다시 처리하지 않는다는 가정 하에 수신자가 첫 번째 또는 두 번째 단계에서 메시지를 처리할 수 있습니다. 수신자가 브로커인 경우 이는 메시지를 구독자에게 발행합니다. 수신자가 클라이언트인 경우 메시지는 구독자 애플리케이션으로 전달됩니다. 수신자는 송신자에게 메시지 처리가 완료되었다는 완료 메시지를 송신합니다.