[scrap] MQTT 스터디 노트

http://bcho.tistory.com/864

 

MQTT 스터디 노트

스터디 노트

– IBM에서 만듬

– FB 메신져가 이걸 사용. 국내 통신사 PUSH 서버도 이걸 사용함

– 일단 FB가 쓰니, 동남아권 Telco에서 패킷 걸리는 문제는 없을듯

– Qos 0,1,2로 해서, 2 의 경우 message delivery를 gurantee함

– 저전력!! 이게 중요.

– XMPP에 비해서 훨씬 경량. (XMPP는 XML, MQTT는 byte로 보내는데, 2바이트부터 시작)

– MQTT 서버를 라즈베리와 같은 임베디드 서버에도 넣을 수 있음. IOT용!! 즉 Things가 서버가 될 수 있다!!

– 대부분 사용자 인증만 제공 (user id/password 방식) 이것도 대부분 서버들이 파일에 저장한다. (IDM이나 KEY 시스템과 연계 필요)

– TLS/SSL은 지원. X.509 인증서를 이용한 양방향 인증도 지원

간단 테스트

1. http://mosquitto.org/download/ 에서 윈도우즈용 받아서 설치

2. 서버 구동

2. Message Subscriber 기동

: -h host명, -t 토픽명

3. 메세지 보내기

: -h 호스트명 -t 토픽명 -m “메세지”

※ 참고 :

  • 그냥 오래 놔두면, 서버에서 Subscriber로 hearbeat를 보내는 것을 볼 수 있음.
  • Subscriber를 hangup 시켜 버리면, 서버에서 자동으로 Connection을 끊음.
  • Subscriber hangup을 풀어주면, 자동으로 서버로 붙는 걸 볼 수 있음

MQTT 서버 검토 결과 요약

mosquitto

– 간편해서 좋기는 한데. C 기반. 그리고 클러스터링이 안됨.  (HA, Fail over는 어케 한다냐?). Facebook이 쓴다고 하는데. Consistent hashing같은걸 써야 하는데, Fail back이 복잡할듯

– user authentication을 이건. file에 넣고 한다.

– 테스트 해보니 일정 시간 패킷이 안오면 하트비트 메세지 보내기 시작하고, 메세지가 안오면 끊어 버린다.

HiveMQ (저가 상용)

– Clustering 됨 (Infinispan 씀)

– JMX 모니터링 디는 걸로 봐서. 이것은 JAVA

– MultiCast로 클러스터링을 하지만, TCP로 Fixed Size 클러스터나, AWS EC2 클러스터 지원이 가능함.

– AWS/Azure 모두 지원

– 근데 회사가 좀 작아 보인다?? 독일 SI회사

Rabbit MQ

– shared memory 구조가 없어서 어떻게 하는가 궁금하기는 하지만, federation이나 shovel 컨셉을 쓰면 WAN 구간도 가능하기 때문에, 주의깊게 볼만함. 무엇보다 무료에다가 상대적으로 Learning curve가 낮음.

– MQTT 3.1 지원

– QoS0과 1만 지원 (2는 지원 안함)

– SSL 지원

– Session stickiness 지원

IBM MQ 

– http://www-03.ibm.com/software/products/en/wmq-telemetry 이게 갑인듯

Vert.x

–  아직 부족한듯. – 특히 QoS2 지원하려면 Q나 메세지 전송에 대한 결과치를 가지고 resend할 수 있는 메카니즘이 있어야 하는데 없는듯.

추가적인 의문사항

  • 서버에 붙고 떨어지는 이벤트를 받을 수 있나?
  • 클라이언트가 떨어지는 이벤트는 어떻게 받지? mosquitto는 단순 서버라서 몬가 event listener를 달 수 없어. 그래서, 클라이언트가 떨어질때 몬가를 할 수 없지.
  • 근데, 로그를 보면 주기적으로 ping을 보내는 걸?

클라이언트

– 이클립스 Paho등 제법 많음

– Embedded 시스템에 넣을 수 있을 정도로 작음

괜찮은 자료