RabbitMQ 사용해보기 (w. Docker)

🔥Log·2024년 6월 7일
0

RabbitMQ

목록 보기
2/9

☕ 개요


지난 글에 이어서 이번 글에서도 RabbitMQ를 알아보는 시간을 갖도록 하겠다. 저번 시간에는 주요 개념들에 대해서 알아봤다면, 이번 글에서는 실제로 RabbitMQ를 사용해보면서 디테일한 기능 및 개념을 알아보도록 하겠다.

메세지를 Publish하고 Consume하는 것들은 실무에서는 프로듀서와 컨슈머가 수행하는 것이지만, 편의를 위해서 RabbitMQ Management-ui에서 모든 실습을 진행하겠다.

그럼 바~로 ㄱㄱ 🔥



🐋 Docker로 구동하기


✍️ RabbitMQ 공식 Docker 이미지

나는 RabbitMQ를 Docker로 구동할 것이므로 아래에 작성할 내용에 따라서 RabbitMQ를 설치 및 실행해주자.

1) 컨테이너 실행

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를 실행할 수 있다.

2) 동작 확인

컨테이너를 실행한 후, localhost:15672로 접속해보면 RabbitMQ 관리페이지가 접속되는 것을 확인할 수 있다.

로그인할 때, 아이디와 패스워드는 guest를 입력해주면 된다.



실습 1: Message Queueing/Dequeueing


먼저, 다른 설정 없이 큐에 메세지를 넣고, 읽어들여보는 간단한 실습을 해보겠다.

  1. 큐 생성
  2. 큐 생성 확인 후, 큐 페이지로 이동
  3. 메세지 Publish
    Delivery mode: Persistent는 디스크에 메세지를 저장하는 것을 의미해서, RabbitMQ를 재부팅해도 메세지가 남아 있다.
  4. Queueing된 메세지 확인 (Dequeueing)


실습 2: Fanout exchange


이번에는 Fanout exchange를 만들고, 큐들과 바인딩한 후 메세지를 Publish해보겠다. Fanout exchange는 부가적인 라우팅룰이 없고, 바인딩된 모든 큐에 라우팅이 된다는 특징을 갖고 있다.

  1. Exchange 탭에서 Fanout exchange를 하나 생성해준다.
  2. 추가적으로 2개의 큐를 생성해준다.
  3. 위에서 생성한 Exchange 페이지로 이동한 후, 방금 생성한 큐들과 바인딩해준다. 추가적인 바인딩 옵션은 필요하지 않다.
  4. 여러 개의 메세지를 Publish 한다.
  5. 큐에 들어갔는지 확인한다.
  6. 위에서 생성한 큐들의 상세 페이지에 접속한 후, 메세지를 읽는다. 각 큐 마다 Publish한 메세지들이 모두 읽어진다면, 잘 동작한 것이다.


실습 3: Conditional routing


이번에는 Direct exchange와 Routing key를 통한 조건부 라우팅을 구현해보겠다.
본격적으로 시작하기 전에 위에서 생성한 큐들의 메세지들을 Purge해주자.

  1. 타입을 direct로 선택하고, Exchange를 하나 만들어준다.
  2. 두 종류의 Routing key로 Exchange와 이전 섹션에서 생성한 2개의 큐와 바인딩 해준다. 나는 soccer로 2개의 큐를 모두 바인딩했고, baseball로 하나의 큐와 바인딩했다.
  3. Routing key에 soccer 또는 baseball을 입력하고, 메세지를 Publish한다. 나는 soccer는 3번 baseball은 1번 메세지를 Publish했다.
  4. 결과 확인
    첫 번재 큐는 3개의 메세지, 두 번째 큐는 4개의 메세지가 정상적으로 들어가있는 것을 확인할 수 있다.


실습 4: Topic exchange


이번에는 좀 더 다양한 경우의 수를 커버할 수 있는 Topic exchange를 활용한 큐잉을 실습해보겠다.

  1. topic 타입의 Exchange를 하나 만들어준다.
  2. 이전에 만든 큐들과 다양한 패턴의 Routing key로 바인딩한다.
  3. 아래와 같은 옵션으로 메세지들을 Publish한다.
    • Routing key=event.sport
    • Routing key=event.sport.baseball
    • Routing key=log.sport.soccer
    • Routing key=event.sport.soccer.
    • Routing key=event.food.korean.rice
    • Routing key=event.food.japanese.rice
  4. 결과 확인
    첫 번째 큐가 2개의 메세지만 받은 이유는 event.sport.baseball, log.sport.soccer 이외의 Routing key가 담긴 메세지들은 라우팅의 대상이 되지 않아서 그렇다.
    두 번째 큐의 경우 event.food.japanese.rice만 제외하고는 모두 라우팅 대상이 되므로, 5개의 메세지가 쌓인 것을 확인할 수 있다.
    여기서 #은 어떤 것이든 올 수 있다는 것을 뜻하고, *은 패턴은 유지하면서 어떤 글자든 올 수 있다는 것을 의미한다는 것을 알 수 있다.


실습 5: Headers exchange


이번에는 RabbitMQ에서 가장 유연하게 운영 가능한 Headers exchange를 실습해보도록 하겠다.

  1. headers타입으로 Exchange를 하나 만들어준다.
  2. 아래와 같은 옵션으로 첫번째 큐와 바인딩한다.
  3. 아래와 같은 옵션으로 두번째 큐와 바인딩한다.
  4. 하나의 Header를 갖고 있는 메세지 Publish
  5. platformyoutube인 메세지 Publish
  6. platformtv인 메세지 Publish
  7. 3개의 메세지를 Publishing한 결과 확인
    첫번째 큐는 x-match=all로 바인딩한 큐여서, 모든 헤더가 일치해야 메세지가 쌓이므로, 1개의 메세지만 쌓인 것을 확인할 수 있다.
    두 번째 큐는 x-match=any로 바인딩한 큐여서 하나의 헤더만 일치해도 메세지가 쌓이므로, 모든 메세지가 잘 쌓인 것을 확인할 수 있다.


🥷 VHost


RabbitMQ에서는 vhost라는 개념이 있다. 이는 하나의 RabbitMQ 클러스터에서 여러 '환경'을 생성하고 모든 데이터(Exchange, Queue 등등)을 구분해서 관리할 수 있는 역할을 한다.
이를 통해서 개발 환경, QA 환경, Production 환경 등등을 생성하고 따로 관리 및 운영을 할 수 있는 것이다.

1) vhost 생성

Admin 탭에서 간단히 Virtual host를 만들어줄 수 있다. 이름은 /xxx과 같은 형태로 지어주는 것을 권장한다.

2) 생성 확인

Exchange 탭으로 이동해보면, vHost 별로 Exchange들이 생성된 것을 확인할 수 있고, 우측 상단의 Virtual host를 선택할 수 있는 옵션에도 새로 생성한 vHost가 추가된 것을 확인할 수 있다.



🙏 참고


0개의 댓글

관련 채용 정보