본문 바로가기

웹 프로그래밍/스프링

RabbitMQ

 

 

Message Broker

서비스가 발전하면서 기능이 많아지면 하나의 서버에서 모든것을 처리하지 않는 방향을 생각해 볼수있다.

  • 인증만 담당하는 서버를 따로 만들거나
  • 서비스 사용 이력을 검색 가능한 형태로 기록하거나
  • 채팅만 담당하거나
  • 크롤링이나 알림 메시지 보내는것만 담당하는 등

이럴경우 서로 상호 소통을 해야하는 상황이 발생함 -> 서버 분리

 

 

Http(동기식 통신)를 사용할때의 단점

  • 요청을 보낸후 응답이 올때까지 서버의 수행이 중단(해당 서버가 죽으면 보낸 요청은 불확실해짐)
  • 여러 서버에 동시에 정보를 전달하기 번거로움
  • 어떤 특정 서버를 지정해서 요청을 보내야 하기 때문에 결합성 증가

 

대신 Message Broker(비동기)라는 소프트웨어(미들웨어)를 사용해 메세지의 전달을 위임할수 있다.

  • 서버는 메세지를 Message Broker에 한 시점에 맡기고
  • 메세지 대상자는 처리 가능한 시점에 Message Broker에서 메세지를 꺼내간다
  • 서버간의 결합성을 감소시키고 확장성을 확보한다

 

RabbitMQ

AMQP 통신을 기반으로 여러 소프트웨어간 메세지를 주고받게 해주는 대중적인 Message 브로커

  • Spring Boot AMQP를 이용해 쉽게 사용할수 있다.
  • 무료로 사용이 가능

 

도커와 RabbitMQ

docker run -d \
  --hostname my-rabbit \
  --name some-rabbit \
  -e RABBITMQ_DEFAULT_USER=myuser \
  -e RABBITMQ_DEFAULT_PASS=mypassword \
  -e RABBITMQ_DEFAULT_VHOST=myvhost \
  -p 5672:5672 \
  -p 15672:15672 \
  rabbitmq:3-management

 

 

환경변수로 아이디와 비밀번호 설정이 가능