2019. 1. 31. 09:26ㆍ개발/기타
RabbitMQ에 대해서 학습하다가 유튜브에서 발견한 영상인데 심플하고 알기 쉽게 설명해줘서 해당 영상의 글을 정리해서 써본다. ( 링크 : https://www.youtube.com/watch?v=deG25y_r6OY )
RabbitMQ는 프로듀서가 작업을 생성하고 Consumer에게 작업(message)을 던져 줄 때 그중간에서 Broker 역할을 수행한다. 단순한 예를들면, 덧셈연산은 Consumer 1에 보내고, 곱셈연산은 Consumer2에 보내고 싶을때 RabbitMQ를 통해서 작업을 스케쥴링 해줄 수 있다.
RabbitMQ에는 Queue뿐만 아니라 Exchange라는 모듈이 존재하기 때문에 프로듀서가 바로 Queue에 message를 넣을 수 없고, Exchange라는 모듈을 한번 거쳐서 큐에 들어가게된다.
Exchange는 네트워크의 라우팅같은 역할을 하는데 message를 어디로 어떻게 보낼지를 결정하게된다.
해당 영상에서는 Producer와 Consumer에서 사용하는 기본적인 용어를 설명해준다.
첫번째는 Publishing이다. Producer는 Consumer에게 작업을 보내기위해 Message를 생성하고 Exchange에 message를 보내게 되는데 이러한 행위를 Publishing이라고 한다.
두번째는 Consuming. Producer가 보낸 message가 queue에 저장되어 있는데 이를 Consumer로 가져오는 행위를 Consuming 이라고 한다.
이제 위처럼 좀 더 확장된 형태의 queue를 가지고 있을때 어떻게 Exchange가 queue에 작업을 할당하는지 살펴보자.
사실 Producer가 Message를 Publishing할때 Message에 routing key라는 것을 붙이게 된다.
이는 Exchange를 통해서 각 queue의 binding key와 비교하게 된다. 만약 routing key와 일치하는 binding key가 있다면 해당 queue로 message를 보내게 된다.
binding key는 사용자가 Exchange와 queue를 최초에 연결 할때 정하게 된다.
(정하지 않을 수도있음)
첫번째는 Fanout 방식이다. 네트워크의 Broadcast와 똑같다. Message를 Fanout 옵션이 달린 Exchange에 보내게 된다면 Exchange에 연결된 모든 queue로 Message가 전달된다.
다음은 Direct 방식이다. message에 routing key를 할당해서 Direct 옵션이 달린 Exchange로 보내면 해당 Exchange는 message에 할당된 routing key와 자신과 연결되어있는 queue들의 binding key와 비교한다. 만약 같은 것이 있다면, 해당 queue로 message를 보내고, 없다면 에러를 발생시킨다.
세번째는 Topic 방식. routing key와 binding key를 비교하는 것은 똑같지만 위 그림처럼 부분적으로 일치 ( Partial match )해도 해당 큐에 message를 보내는 방식이다.
네번째는 Header 방식. 그림에 나와있듯이 routing key와 binding key를 비교하는것이 아닌
message내에 있는 Header와 binding key를 비교한다.
다섯번째는 Default(Nameless) 방식. 이 Exchange 모듈은 최초에 queue와 바인딩을 시도할때 binding key를 정하지 않으며, message의 routing key와 queue를 만들때 붙였던 이름과 비교해서 message를 큐에 보낸다.
'개발 > 기타' 카테고리의 다른 글
MyBatis 사용 예제 ( feat. Spring Boot , MariaDB ) (0) | 2020.08.22 |
---|---|
Anaconda에서 자주 사용하는 명령어 (0) | 2020.04.11 |
[Django] 프로젝트 폴더 생성하기 (0) | 2020.02.02 |
[PL/SQL] 값 입력받기 (0) | 2019.12.22 |
[Oracle] GROUP BY , HAVING 사용 예 (0) | 2019.12.01 |