본문 바로가기

스프링/Spring

RabbitMQ 설치하기

반응형

프로젝트를 하면서 RabbitMQ를 공부했던 내용을 정리하기 위해 정리했습니다.

 

RabbitMQ는 무엇인가?

  • rabbitmq는 Advance Message Queuing Protocol(AMQP)을 구현하는 메세지 중개인입니다.
  • AMQP는 생산자(Producers), 중개자(Broker) 그리고 소비자(Consumer)를 사용해서 메세지를 전달하는 것을 표준화한 프로토컬입니다.
  • AMQP 표준은 다음 세 개의 주요 특징을 준수하도록 설계되었습니다.
    • 보안, 신뢰도, 상호 운용

핵심 특징

  • 보안 : 인증, 인가, LDAP 그리고 Rabbit 플러그인을 사용한 TLS를 지원함
  • 신뢰도 : 1. 메세지가 성공적으로 메세지 브로커에게 전달되었는지, 2. 메세지가 소비자에게 성공적으로 처리되었는지 확인함
  • 상호 운용 : 메세지는 바이트 스트림으로 전달되기 때문에 모든 클라인언트가 언어에 관계 없이 메세지를 작업할 수 있음

 

핵심 개념과 아키텍쳐

RabbitMQ에서 중요한 개념으로는 Producer, Consumer, Queue, Exchange, Binding이 있습니다.

  • Producer는 메세지를 생성하고 발송하는 주체입니다. 이 메세지는 Queue에 저장이 되는데, 주의할 점은 Producer는 Queue에 직접 접근하지 않고, 항상 Exchange를 통해 접근하게 됩니다.
  • Consumer는 메세지를 수신하는 주체입니다. Consumer는 Queue에 직접 접근하여 메세지를 가져옵니다.
  • Queue는 Producer들이 발송한 메세지들이 Consumer가 소비하기 전까지 보관되는 장소입니다. Queue는 이름으로 구분됩니다.
  • Exchange는 Producer들에게서 전달받은 메세지들을 어떤 Queue들에게 발송할지를 결정하는 객체입니다. Exchange는 네 가지 타입이 있으며, 일종의 라우터 개념입니다.
  • Binding은 Exchange에게 메세지를 라우팅 할 규칙을 지정하는 행위입니다. 특정 조건에 맞는 메세지를 특정 큐에 전송하도록 설정할 수 있습니다.

 

# exchange 모드

- Direct : 라우팅 키를 이용하여 메세지를 라우팅 하는데, 하나의 큐에 여러 개의 라우팅 키를 지정할 수 있습니다.
- Topic : 라우팅 키 패턴을 이용하여 메세지를 라우팅 합니다.
- Fanout : exchange에 등록된 모든 queue에 메세지를 전송합니다.

- Headers : Topic Exchange와 유사하지만 라우팅을 위해 header를 쓴다는 차이점이 있습니다.

# Virtual host란?

- 가상 호스트로 사용자마다 가상 호스트에 권한을 부여하여, 권한이 있는 사용자만 접근하도록 할 수 있습니다.

 

Message Queue 및 Message 보존

RabbitMQ server가 종료 후 재기동하면, 기본적으로 Queue는 모두 제거됩니다. 이를 막기 위해서는 Queue를 생성할 때, Durable 옵션에 true를 주고 생성해야 하며, Producer가 메세지를 발송할 때, PERSISTENT_TEXT_PLAIN 옵션을 주어야 메세지가 보존됩니다.

radditmq를 설치하기 (mac OS 기준)

brew를 사용해 설치합니다. 도커를 사용해 설치하는 방법도 있으니 참고하시면 될 거 같습니다. 

$ brew update
$ brew install rabbitmq

 

환경변수 등록하기

$export PATH=$PATH:/usr/local/sbin

 

 

# RabbitMQ 서버 스크립트 및 CLI 도구 위치

$ cd /usr/local/sbin
$ ls

 

서버 실행

$ rabbitmq-server

// 백그라운드에서 서버 실행 시 다음 명령어 실행하기
$ brew services start rabbitmq

 

RabbitMQ는 GUI 환경의 관리 화면을 제공하는데 port 번호 15672로 접근하시면 확인할 수 있습니다.

http://localhost:15672로 접근하고 username / password로 초기값인 guest/guest로 로그인하시면,

관리 화면을 확인할 수 있습니다

 

터미널에서 접속 계정 생성 및 권한 설정

사용자 리스트 확인

$ cd /usr/local/sbin
$ ./rabbitmqctl list_users

 

사용자 추가

$ ./rabbitmqctl add_user {사용자} {비번}

 

사용자 태그 설정

$ ./rabbitmqctl set_user_tags {사용자} {태그} Setting tags for user "사용자" to [태] ...

 

사용자 접속 권한 부여

$ ./rabbitmqctl set_permissions -p / {사용자} ".*" ".*" ".*"
Setting permissions for user "사용" in vhost "/"...

 

사용자의 퍼미션을 확인

$ ./rabbitmqctl list_user_permissions {사용자}

 

 

다음에 스프링 부트에서 Rabbitmq를 사용해 메세지를 주고받는 것을 구현해보겠습니다.

반응형