지난 글에 이어서 이번 글에서도 RabbitMQ를 알아보는 시간을 갖도록 하겠다. 저번 시간에는 주요 개념들에 대해서 알아봤다면, 이번 글에서는 실제로 RabbitMQ를 사용해보면서 디테일한 기능 및 개념을 알아보도록 하겠다.
메세지를 Publish하고 Consume하는 것들은 실무에서는 프로듀서와 컨슈머가 수행하는 것이지만, 편의를 위해서 RabbitMQ Management-ui에서 모든 실습을 진행하겠다.
그럼 바~로 ㄱㄱ 🔥
✍️ RabbitMQ 공식 Docker 이미지
나는 RabbitMQ를 Docker로 구동할 것이므로 아래에 작성할 내용에 따라서 RabbitMQ를 설치 및 실행해주자.
docker image pull rabbitmq:3.13.3-management
docker run --name RabbitMQ -d -p 5672:5672 -p 15672:15672 rabbitmq:3.13.3-management
위 명령어를 순차적으로 실행하면, RabbitMQ를 실행할 수 있다.
컨테이너를 실행한 후, localhost:15672로 접속해보면 RabbitMQ 관리페이지가 접속되는 것을 확인할 수 있다.
로그인할 때, 아이디와 패스워드는 guest
를 입력해주면 된다.
먼저, 다른 설정 없이 큐에 메세지를 넣고, 읽어들여보는 간단한 실습을 해보겠다.
Delivery mode: Persistent
는 디스크에 메세지를 저장하는 것을 의미해서, RabbitMQ를 재부팅해도 메세지가 남아 있다.이번에는 Fanout exchange를 만들고, 큐들과 바인딩한 후 메세지를 Publish해보겠다. Fanout exchange는 부가적인 라우팅룰이 없고, 바인딩된 모든 큐에 라우팅이 된다는 특징을 갖고 있다.
이번에는 Direct exchange와 Routing key를 통한 조건부 라우팅을 구현해보겠다.
본격적으로 시작하기 전에 위에서 생성한 큐들의 메세지들을 Purge해주자.
direct
로 선택하고, Exchange를 하나 만들어준다.soccer
로 2개의 큐를 모두 바인딩했고, baseball
로 하나의 큐와 바인딩했다.soccer
또는 baseball
을 입력하고, 메세지를 Publish한다. 나는 soccer
는 3번 baseball
은 1번 메세지를 Publish했다.이번에는 좀 더 다양한 경우의 수를 커버할 수 있는 Topic exchange를 활용한 큐잉을 실습해보겠다.
topic
타입의 Exchange를 하나 만들어준다.event.sport
event.sport.baseball
log.sport.soccer
event.sport.soccer.
event.food.korean.rice
event.food.japanese.rice
event.sport.baseball
, log.sport.soccer
이외의 Routing key가 담긴 메세지들은 라우팅의 대상이 되지 않아서 그렇다.event.food.japanese.rice
만 제외하고는 모두 라우팅 대상이 되므로, 5개의 메세지가 쌓인 것을 확인할 수 있다.#
은 어떤 것이든 올 수 있다는 것을 뜻하고, *
은 패턴은 유지하면서 어떤 글자든 올 수 있다는 것을 의미한다는 것을 알 수 있다.이번에는 RabbitMQ에서 가장 유연하게 운영 가능한 Headers exchange를 실습해보도록 하겠다.
headers
타입으로 Exchange를 하나 만들어준다.platform
이 youtube
인 메세지 Publishplatform
이 tv
인 메세지 Publishx-match=all
로 바인딩한 큐여서, 모든 헤더가 일치해야 메세지가 쌓이므로, 1개의 메세지만 쌓인 것을 확인할 수 있다.x-match=any
로 바인딩한 큐여서 하나의 헤더만 일치해도 메세지가 쌓이므로, 모든 메세지가 잘 쌓인 것을 확인할 수 있다.RabbitMQ에서는 vhost
라는 개념이 있다. 이는 하나의 RabbitMQ 클러스터에서 여러 '환경'을 생성하고 모든 데이터(Exchange, Queue 등등)을 구분해서 관리할 수 있는 역할을 한다.
이를 통해서 개발 환경, QA 환경, Production 환경 등등을 생성하고 따로 관리 및 운영을 할 수 있는 것이다.
Admin 탭에서 간단히 Virtual host를 만들어줄 수 있다. 이름은 /xxx
과 같은 형태로 지어주는 것을 권장한다.
Exchange 탭으로 이동해보면, vHost 별로 Exchange들이 생성된 것을 확인할 수 있고, 우측 상단의 Virtual host를 선택할 수 있는 옵션에도 새로 생성한 vHost가 추가된 것을 확인할 수 있다.