프로젝트를 하면서 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를 사용해 메세지를 주고받는 것을 구현해보겠습니다.
'스프링 > Spring' 카테고리의 다른 글
[SpringBoot] 서블릿의 HttpSession을 사용해 세션 구현하기 (0) | 2021.10.26 |
---|---|
[SpringBoot] 스프링부트에서 비동기 처리하기 (0) | 2021.10.25 |
[SpringBoot] 스프링부트에서 스케쥴러 사용하기 (0) | 2021.10.24 |
Rabbitmq + SpringBoot 샘플 프로젝트 만들기 (0) | 2021.10.16 |
Spring Boot 프로젝트 생성하기 (0) | 2021.01.07 |