Network/IoT-MQTT

MQTT Will message

양디 2016. 2. 20. 13:23


Will Message ?


영어 단어 Will은 , 명사로 의지, 유언의 의미를 가지고 있다.


MQTT에서 will은 의지가 아닌 유언의 뜻으로 사용된다.


클라이언트가 브로커에게 연결하고, will 메시지를 등록하면 

비정상적으로 연결이 종료되었을 때에 해당 will 메시지를 발행하게된다.


사물인터넷 환경에서 연결이 항상 유지된다는 보장이 없기 때문에, 이러한 will 메시지를 통하여 디바이스가 연결이 종료되었다는 것을 확인하고 조치할 수 있다는 장점이 있다.


이 will 메시지는 클라이언트가 브로커에 연결 -> will topic/will message/will qos 전달

을 완료한 후에, 브로커는 계속해서 클라이언트가 제대로 연결이 되어 있는지 주기적으로 확인하게 된다. (Keep Alive)


이 때에 만약 disconnect 메시지를 보내지 않았는데 연결이 종료되었다는 것을 확인하게되면, 브로커는 will 메시지를 구독자들에게 발행한다.



Mosquitto 실습



위의 두 사진을 보자.


먼저 처음 사진의 윗부분 커맨드 창을 보면, 


> mosquitto_sub -h localhost -t /test --will-topic /will --will-payload "Will Message"


라고 구독을 실행한다. 

그리고 바로 ctrl+c로 클라이언트를 종료시킨다.


이후에 젤 아래 사진의 브로커를 보면, 밑에서 6번째 줄에 

Client mosqsub/3648-YangD-PC has exceeded timeout, disconnecting 이라는 로그가 보인다.


이는 연결이 종료되었다는 것을 브로커가 알아차린것이고, 따라서 그 아래에 will 메시지를 Publish하는 것을 볼 수 있다.


따라서 위에서 두번째 커맨드창에 Will Message 가 정상적으로 도착하였음을 알 수 있다.


Subscriber를 실행하였음에도 메시지를 publish 한 것을 볼 수 있다.


클라이언트는 누구든지 will 메시지를 남길 수 있으며, 이 will 메시지는 자신이 구독하고 있는 토픽과 무관하게 토픽을 정할 수 있다.


끝.





댓글