MQTT사용 시의 RabbitMQ vs ActiveMQ(amazonMQ)
IoT 쪽 인프라를 설계할 일이 있어서 MQ로 어떤걸 쓸지 고민했던 부분을 정리해 둔다.
기본적인 개념은 다 빼고 MQTT에 관련한 부분만 적음
RabbitMQ - MQTT plugin으로 지원 가능
MQTT client로 접속 시 mqtt-subscription-{client id}qos? 형태로 queue가 생성되고 이를 Consume 함
read only로 쓰려면 configure, read permission만 줄 것
ActiveMQ - MQTT 기본으로 지원, AmazonMQ라는 좋은 클라우드 서비스 있음
AmazonMQ때문에 ActiveMQ(이하 A)를 안 쓸 이유가 없어서 일단 이쪽 중심으로 구현하려고 해 봤는데,
A의 구조상 한계가 좀 있었다.
RabbitMQ (이하 R) 에서는 queue하나를 MQTT connection에 아예 할당해 주고 접속 시 이걸 consume하기 때문에
exchange (A에서의 topic 형태 (pub/sub)) 메시지이든,
1인에게 work queue 형태로 전달하는 메시지이든
bind만 해두면 다 받을 수 있다.
A는 이게 불가능하다. topic 형태 (pub/sub) 의 것만 받을 수 있음.
(R에서는 queue, exchange, routing key, A에서는 queue, topic, virtual destinations 정도를 이해하고 있다면 각 제품별 메시지 전달 개념을 잡는데는 문제가 없을 것이다.)
애초에 전체적으로 구현을 줄이기 위해서 Kafka같은 단순한 녀석보다 좀 덩치 있는 MQ를 쓰기로 했으니
어쩔 수 없이 R을 써야할것 같은데
이리저리 샘플 구현을 해보면서 든 생각은 R이 문서나 API 예제나 엄청 잘 돼 있다는 것.
A쪽은 Apache쪽이 원래 좀 그렇지만 문서 타입도 그렇고
AWS 보안과 연계되면서 생기는 퍼미션 할당도 그렇고
생각보다 설정이 까다롭다.
결론: MQTT를 이용해서 persistent 스러운 메시지를 다루는 데는 R이 훨씬 적합해 보임.
댓글