MQTT

손정만·2022년 1월 18일
0

MQTT란?

MQTT(Message Queuing Telemetry Transport)는 broker를 통해 subscription - publish 구조의 메세지 통신을 지원하며 QoS(Quality of Service)를 지원한다. 작성일 기준 5.0버전까지 존재한다.

Broker

Broker는 MQTT로 통신되는 메시지들을 수신하여 Publish 된 Topic 에 맞추어 Subscribe 된 대상들에게 메시지를 전달하는 역할을 하는 말그대로 중계자 역할입니다. 다양한 Broker들이 존재하며 [이곳](https://github.com/mqtt/mqtt.github.io/wiki/server-support)에서 대략적인 Broker별 지원 내역을 확인할 수 있습니다.(업데이트가 안된 정보도 있을 수 있음)
  • Mosquitto : 서버 이중화로 인한 메세지 큐 문제로 EMQ로 변경하여 사용하였음

  • EMQ : clustering 대신 shared subscription 을 통해 이중화 문제 해결

    	> **Clustering**  
    	> 노드간 발행 / 구독 관계를 공유하여 부하를 감소시킨다.  
    	>![Clustering](https://i.imgur.com/m9vrJjb.png)
    
    	> **Shared subscription**  
    	> 기존에 구독되어있는 사람 모두에게 메세지가 전달 되는 상황을 순차적으로 입력받은 메세지를 하나의 구독자에게만 전달한다.  
    	> ![Shared subscription](https://i.imgur.com/CMdS4zS.png)

Publish / Subscribe

A가 X 라고 하는 Topic에 대하여 Subscribe한 경우, B가 X에 대해 Publish 하면 Broker에서 A로 해당 메세지를 중계해줍니다.

Topic

대상Topic
Ahome/livingroom/sensor1
Bhome/kitchen
Chome/kitchen/sensor1
Dhome/kitchen/sensor2
Ehome/#
Fhome/+/sensor1

Topic은 Publish 혹은 Subscription 할 대상을 지정합니다. / 을 구분자로 사용하여 각각의 Topic을 분리합니다. 와일드 카드로 +# 가 있으며
Subscription이 A ~ D 까지 4개로 등록되어 있을때

송신Topic수신Topic
AA
BB
CC
DD
EA, B, C, D
FA, C

위와 같은 대상이 메세지를 Publish된 메세지를 수신할 수 있습니다.

QoS

  • QoS 0 : 송신자와 브로커는 패킷유실을 고려하지 않고 전송하기만 한다.
  • QoS 1 : 수신자가 수신완료 응답을 반환할때까지 송신자는 여러번 재시도한다. 중복 메세지가 발생할 수 있다.
  • QoS 2 : 송신자와 수신자는 handshaking을 통해 한번만 요청 / 처리가 된다. handshaking 에서 지연이 발생할 수 있다.

관련 라이브러리

Java

paho#

참조

0개의 댓글