Network/IoT-MQTT

MQTT Retain bit Message

양디 2016. 2. 18. 17:16



Retain Bit


위의 사진은 이전의 포스팅에서 다루었던 메시지 Fixed header이다.


위의 1바이트의 0번 비트를 보면, Retain 이라는 비트가 존재한다.




영어 단어의 뜻을 보자면, 유지하다, 함유하다 라는 뜻을 가지고 있다.


MQTT에서 실제로 쓰이는 방식도 영어 본래의 뜻과 비슷하다. 


Retain bit가 1인 메시지를, Retained message라고 하자.


이 메시지는 계속해서 유지되는데, 


토픽별로 메시지를 유지시킬 수 있다.


직접 Mosquitto로 한번 실험해보자.




mosquitto 브로커를 실행한 상태에서, 위와 같이 해보자.


1. sub를 실행한다. localhost에 접속하여, /test 라는 토픽에 오는 메시지를 받도록 하였다.

2. pub를 실행한다. localhost에 /test 토픽에 "non-retain message" 라는 메시지를 전송한다. retain 비트는 기본이 false(0)이므로, 

그냥 보내면 non-retained message가 보내진다.

3. pub를 다시 실행한다. 이번에는 "retain message"라고 보내고, 마지막에 -r 옵션을 통하여 retain 비트를 켠다.

4. sub를 보면, 보냈던 두 메시지가 모두 도착했음을 알 수 있다.

5. ctrl+c를 통해 sub를 종료시키고, 다시 그대로 sub를 실행시킨다.

6. retain message 는 다시 보내지 않았음에도 sub를 실행시킴과 동시에 도착한 것을 알 수 있다.


retain 메시지는 브로커에 저장되어, 구독자가 Subscribe를 보내면 retain되어 있는 메시지를 전송해준다.


이게 뭐야 - 할 수 있지만 아주 유용한 기능이다.


한번 업데이트 되고, 다시 업데이트 되기까지 시간 간격이 있는 정보의 경우에는 retain을 보내면


subscriber가 언제 구독을 실행하든 가장 최신의 메시지를 받을 수 있기 때문이다.


실제로 캡스톤 프로젝트를 위하여 retain 비트를 유용하게 사용하였다.






댓글