MQTT Option(Qos)
2021. 10. 22. 10:55ㆍAndroid/MQTT
QoS
"최대 한 번", "최소 한 번" 및 "정확히 한 번" 보내는 기능
Level 0 (At most once)
- 메시지는 한번만 전달된다. Fire and Forget이라고도 한다. 즉 보내고 잊는다. 한번만 전달하지만 전달여부는 확인하지 않는 레벨이다.
Level 1 (At least once)
- 메시지는 최소 한번은 전달된다. 유일하게 핸드셰이킹 같은 연결 여부를 확인하지 않고 메시지를 전달하는 레벨이다.
- 위에 그림을 보면 메시지를 성공적으로 전달하면 Broker가 Publisher에게 PUBACK을 보내어 전달 성공을 알리지만 만약 정상적 통신이 이루어지지 않을 경우 Loss가 발생하여 PUBACK을 받지 못못하여 Publisher는 적정 시간이 지나 실패로 알고 다시 메시지를 보내어 Subscribe에게 중복메시지를 보내는 경우가 생기게 된다.
Level 2 (Exactly once)
- 메시지는 반드시 한번 전달된다. 위에 있는 PUBACK 과정을 PUBREC으로 핸드 셰이킹을 함으로서 메시지가 정확히 한번만 가는 레벨이다.
- 만약 위의 과정처럼 Broker가 PUBREC을 전달 받지 못해 Loss가 일어나게 되어도 Broker는 이미 보냈다는 사실을 알고 있기 때문에 새로 보내지 않는다.
* 실 테스트
터미널 #01:
mosquito - c mosquitto.conf -v
mosquito - c mosquitto.conf -v
터미널 #02:
mosquitto_sub -h localhost -p 1883 -u admin - P 123 -t temperature -q 2
터미널 #03:
mosquitto_pub -h localhost -p 1883 -u admin - P 123 -t temperature -m 45 -q 2
* 실제로 테스트시 연결이 끊어지고 3개의 메시지가 추가로 교환 되지 않았다.
클린 세션이 true로 설정되면 브로커는 클라이언트에 대해 아무 것도 저장하지 않으며 이전 영구 세션의 모든 정보도 제거합니다
Now let’s set the level of QoS to 1:
Now the lowest possible level, QoS 0:
참고
MQTT 사이트
https://mqtt.org/mqtt-specification/
참고
https://www.ibm.com/docs/ko/ibm-mq/9.2?topic=concepts-qualities-service-provided-by-mqtt-client
참고
https://medium.com/jungletronics/mqtt-qos-ef1ef4498405
'Android > MQTT' 카테고리의 다른 글
MQTT Option(Retain,CleanSession,LWT) (0) | 2021.10.22 |
---|---|
Mosquitto 설치 및 테스트 (0) | 2021.10.13 |
MQTT 사용하기 (0) | 2021.10.13 |