MQTT 는 M2M 또는 IoT 를 위한 경량 Protocol 로서 저전력 장비에서도 운용이 가능하며, Network bandwidth 가 작은 곳에서도 충분히 운용 가능하도록 설계된 Protocol 입니다.
MQTT Broker 와 연결을 요청하는 클라이언트 는 TCP/IP 소켓 연결을 한 후 명시적으로 연결을 끊거나 네트워크 사정에 의해 연결이 끊어질 때까지 상태를 유지합니다.
하트비트인 Live 와 Topic 에 발행되는 메시지를 통해 연결을 유지하고 메시지 송수신을 하게됩니다.
MQTT Protocol 을 사용하여 Publisher 와 Subscriber 사이에서 메시지를 관리하며 전송해주는 역할을 합니다.
등의 MQTT Broker 가 있습니다.
https://github.com/mqtt/mqtt.org/wiki/server-support
해당 깃 페이지에서 다양한 브로커에 대한 지원 기능 목록을 확인해볼 수 있습니다.
Broker 를 통한 발행/구독 메세징 패턴입니다.
발행
: Broker 에 메시지를 전송구독
: Broker 가 구독하고있는 클라이언트에게 메세지를 전송일대일 혹은 일대다 통신 가능
3가지의 _QoS Level 이 있습니다.
0
: 최대 한 번 전송하며 메시지를 전달합니다. 구독하는 클라이언트가 받는 것을 보장하지 않습니다.1
: 최소 한 번 전송합니다. 구독하는 클라이언트가 메시지를 받았는지 불확실하면 정해진 횟수만큼 재전송합니다.2
: 구독하는 클라이언트가 요구된 메시지를 정확히 한 번 수신할 수 있도록 보장합니다.메시지를 발행/구동하는 행위는 채널단위로 일어나며 이 단위를 Topic 이라고 합니다.
Topic 은 슬래시(/) 로 구분되는 계층 구조를 가집니다.
최상위 토픽은 슬래시(/) 로 시작하지 않아야하며 와일드 카드 문자를 사용할 수 있습니다.
+
: One-Level Wild Card#
: Multi-Level Wild CardMQTT 는 신뢰할 수 없는 네트워크를 포함하는 경우에 자주 사용되기 때문에 비정상적으로 연결이 끊어질 수 있다고 가정하는 것이 합리적입니다.
LWT 는 유언, 유언장 이라는 의미로서 Broker와 Client가 연결이 끊어지면 자동으로 다른 구독자들에게 메시지가 전송되는 기능입니다.
일반적으로 Broker에 연결을 시도하는 시점에 will topic
, will message
, will qos
등을 지정합니다.