MQTT란?
MQTT(Message Queuing Telemetry Transport)는 broker를 통해 subscription - publish 구조의 메세지 통신을 지원하며 QoS(Quality of Service)를 지원한다. 작성일 기준 5.0버전까지 존재한다.
Broker
Broker는 MQTT로 통신되는 메시지들을 수신하여 Publish 된 Topic 에 맞추어 Subscribe 된 대상들에게 메시지를 전달하는 역할을 하는 말그대로 중계자 역할입니다.
다양한 Broker들이 존재하며 이곳에서 대략적인 Broker별 지원 내역을 확인할 수 있습니다.(업데이트가 안된 정보도 있을 수 있음)
- Mosquitto : 서버 이중화로 인한 메세지 큐 문제로 EMQ로 변경하여 사용하였음
- EMQ : clustering 대신 shared subscription 을 통해 이중화 문제 해결
Clustering
노드간 발행 / 구독 관계를 공유하여 부하를 감소시킨다.
Shared subscription
기존에 구독되어있는 사람 모두에게 메세지가 전달 되는 상황을 순차적으로 입력받은 메세지를 하나의 구독자에게만 전달한다.
Publish / Subscribe
A가 X 라고 하는 Topic에 대하여 Subscribe한 경우, B가 X에 대해 Publish 하면 Broker에서 A로 해당 메세지를 중계해줍니다.
Topic
대상 | Topic |
---|---|
A | home/livingroom/sensor1 |
B | home/kitchen |
C | home/kitchen/sensor1 |
D | home/kitchen/sensor2 |
E | home/# |
F | home/+/sensor1 |
Topic은 Publish 혹은 Subscription 할 대상을 지정합니다. /
을 구분자로 사용하여 각각의 Topic을 분리합니다. 와일드 카드로 +
와 #
가 있으며
Subscription이 A ~ D 까지 4개로 등록되어 있을때
송신Topic | 수신Topic |
---|---|
A | A |
B | B |
C | C |
D | D |
E | A, B, C, D |
F | A, C |
위와 같은 대상이 메세지를 Publish된 메세지를 수신할 수 있습니다.
QoS
- QoS 0 : 송신자와 브로커는 패킷유실을 고려하지 않고 전송하기만 한다.
- QoS 1 : 수신자가 수신완료 응답을 반환할때까지 송신자는 여러번 재시도한다. 중복 메세지가 발생할 수 있다.
- QoS 2 : 송신자와 수신자는 handshaking을 통해 한번만 요청 / 처리가 된다. handshaking 에서 지연이 발생할 수 있다.
관련 라이브러리
Java
paho#
참조
- https://ko.wikipedia.org/wiki/MQTT
- https://www.semanticscholar.org/paper/Correlation-analysis-of-MQTT-loss-and-delay-to-QoS-Lee-Kim/f648e0c502776b41d8edc88e4f7789727c02b8fc
- https://randomnerdtutorials.com/what-is-mqtt-and-how-it-works/
댓글남기기