MQTT는 Message Queue Telemetry Transport의 축약으로, IoT나 메시지 전송 서버 등에 사용하기 적합한 통신 프로토콜 중 하나다.
MQTT는 HTTP와는 다르게 중심 서버의 역할을 하는 중개자(broker)가 있고, 토픽을 발행하는 발행인(publisher)이 있으며, 구독자(subscriber)는 발행된 토픽을 통해 중개자로부터 메시지를 받아온다. 그리고 이러한 발행과 구독은 브로커가 관리하게 된다.
브로커는 서버에 개념과는 조금 다릅니다. 그렇기 때문에 Client를 개발할 때 따로 브로커를 개발할 필요가 없습니다. 예를 들면 Client1, Client2가 있는데 Client1이 Client2에게 메시지를 보내려고 하면 Client들이 동일한 토픽을 구독을 한 후 Client1이 브로커에게 해당 토픽을 통해 메시지를 보내면 브로커는 해당 토픽을 구독하는 Client들에게 메시지를 전달합니다. 그렇기 때문에 정확하게 1:1 통신은 아닙니다. 브로커 중 하나인 모스키토를 설치해보고 직접 Client에서 test 모스키토가 아닌 로컬 브로커를 사용해보는 게 좋을 것 같다.
https://mosquitto.org/download/
QoS - MQTT 에서는 3단계의 QoS를 제공한다. - IBM 참조
0 레벨은메시지는 최대 한 번 전달되거나 전혀 전달되지 않습니다. 이 네트워크 간 전달은 수신 확인되지 않습니다. 메시지는 저장되지 않습니다. 클라이언트 연결이 끊어지거나 서버가 실패하는 경우 메시지는 손실될 수 있습니다. QoS=0은 가장 빠른 전송 모드입니다. 이 모드는 "실행 후 삭제"라고도 합니다. MQTT에서는 서버가 QoS=0의 발행물을 클라이언트에 전달하지 않아도 됩니다. 서버가 발행물을 수신할 때 클라이언트 연결이 끊어지는 경우 서버에 따라 발행물을 제거할 수 있습니다. 텔레메트리(MQXR) 서비스에서는 QoS=0으로 송신된 메시지를 제거하지 않습니다. 해당 메시지는 비지속 메시지로 저장되고 큐 관리자가 중지되는 경우에만 제거됩니다.
1 레벨은 기본 전송 모드입니다. 메시지는 항상 최소 한 번 전달됩니다. 송신자가 수신확인을 수신하지 않는 경우, 메시지는 수신확인이 수신될 때까지 DUP 플래그가 설정되어 다시 송신됩니다. 따라서 수신자에게 동일한 메시지가 여러 번 전송되고 이를 여러 번 처리할 수도 있습니다. 메시지가 처리될 때까지 송신자와 수신자는 메시지를 로컬에 저장해야 합니다. 메시지는 처리된 후에 수신자로부터 삭제됩니다. 수신자가 브로커인 경우, 메시지는 구독자에게 발행됩니다. 수신자가 클라이언트인 경우 메시지는 구독자 애플리케이션에게로 전달됩니다. 메시지가 삭제된 후 수신자는 송신자에게 수신확인을 송신합니다. 수신자로부터 수신확인을 받고 나면 송신자로부터 메시지가 삭제됩니다.
2 레벨은 메시지는 항상 정확히 한 번만 전송됩니다. 메시지가 처리될 때까지 송신자와 수신자는 메시지를 로컬에 저장해야 합니다. QoS=2는 가장 안전하지만 가장 느린 전송 모드입니다. 메시지가 송신자에서 삭제되기 전에 송신자와 수신자 사이에 최소 두 쌍의 전송이 발생합니다. 메시지는 첫 번째 전송 후에 수신자 측에서 처리될 수 있습니다. 첫 번째 전송 쌍에서 송신자는 메시지를 전송하고 수신자에게서 메시지를 저장했다는 수신확인을 받습니다. 송신자가 수신확인을 수신하지 않는 경우, 메시지는 수신확인이 수신될 때까지 DUP 플래그가 설정되어 다시 송신됩니다. 두 번째 전송 쌍에서 송신자는 수신자에게 메시지 PUBREL의 처리를 완료할 수 있다고 전달합니다. 송신자가 PUBREL 메시지의 수신확인을 수신하지 않은 경우 수신확인이 수신될 때까지 PUBREL 메시지가 다시 송신됩니다. 송신자는 PUBREL 메시지에 대한 수신확인을 수신하면 저장했던 메시지를 삭제합니다. 메시지를 다시 처리하지 않는다는 가정 하에 수신자가 첫 번째 또는 두 번째 단계에서 메시지를 처리할 수 있습니다. 수신자가 브로커인 경우 이는 메시지를 구독자에게 발행합니다. 수신자가 클라이언트인 경우 메시지는 구독자 애플리케이션으로 전달됩니다. 수신자는 송신자에게 메시지 처리가 완료되었다는 완료 메시지를 송신합니다.
'IT > general' 카테고리의 다른 글
[IDE] 이클립스 설치 (0) | 2021.06.03 |
---|---|
[가상화폐] 가정용 데스크탑 PC 이더리움 채굴 (0) | 2021.05.28 |
성능 테스트 도구 JMeter 설치 및 간단 사용 (0) | 2020.11.17 |
비주얼 스튜디오 코드 한글 사용 (0) | 2020.09.21 |
콜백 함수?(Callback function) (0) | 2020.07.23 |