And Brain said,
RabbitMQ, 비동기 메시지 큐를 위한 신문사 본문
오늘은 MSA의 서비스 간 비동기 통신을 위한 미들웨어인 RabbitMQ에 대해 알아보고 실습까지 진행해보자.
MSA에서는 각각의 서비스들의 결합도를 낮추고 유연성을 높이기 위해 RabbitMQ, Kafka, Redis같은 메시지 브로커들을 사용한다.
메시지 브로커란 메시지 큐의 일종으로, 다수의 클라이언트 간에 메시지를 전달하고, 중개하는 역할을 한다.
만약, 한 서비스에서 다른 서비스로 데이터를 전송해야 하는 상황에서 직접적인 REST API 호출이 아닌 RabbitMQ를 통해 메시지를 전송할 경우, 발신 서비스는 메시지를 전송한 후에 바로 응답을 반환할 수 있으며, 수신 서비스는 해당 메시지를 수신하여 처리할 수 있다.
이를 통해 서비스 간의 결합도를 낮추고, 장애나 부하 발생 시에도 시스템 전체에 영향을 최소화할 수 있다.
RabbitMQ의 구성 요소로는 Producer, Consumer, Exchange, Queue가 있다.
Producer가 메시지를 생성하고 Exchange로 보내면, Exchange는 그 메시지를 어떤 Queue로 보낼지 결정하는데, 이때 Exchange와 Queue 간의 라우팅 규칙을 지정할 수 있어, 특정 Queue로만 메시지를 보내거나 여러 개의 Queue로 메시지를 분배할 수도 있다.
Queue는 메시지를 저장하는 공간으로, Consumer가 메시지를 가져와 처리한다.
RabbitMQ는 메시지를 한 번에 하나의 Consumer에게만 전달하는 것이 아니라, 여러 개의 Consumer가 동시에 메시지를 가져올 수 있도록 지원하는데, 이를 위해 Queue는 동시에 여러 개의 Consumer가 메시지를 가져올 수 있도록 설계되어 있다.
이때, Consumer는 Queue를 구독하여 메시지를 받는다.
Consumer가 Queue를 구독하면, RabbitMQ는 Consumer에게 메시지를 전송한다.
Consumer는 메시지를 수신하고 처리를 완료한 후, 해당 메시지를 RabbitMQ에게 알림으로써 처리 완료를 알린다.
처리가 완료되면 해당 메시지를 제거한다.
이를 Acknowledgment(ACK)라고 한다.
자, 이제 RabbitMQ를 설치해보자.
도커를 이용해 설치할 것이다.
도커 컴포즈 파일을 작성해주자.
# rabbitmq-compose.yml
version: '3'
services:
rabbitmq:
container_name: rabbitmq
image: rabbitmq:management
ports:
- "5672:5672"
- "15672:15672"
environment:
TZ: Asia/Seoul
networks:
msa-network:
ipv4_address: 172.19.0.2
networks:
msa-network:
driver: bridge
ipam:
driver: default
config:
- subnet: 172.19.0.0/16
gateway: 172.19.0.1
docker-compose -f rabbitmq-compose.yml up
생성한 디렉토리에서 명령어 실행
username: guest
password: guest
를 입력하면
Thanks for watching, Have a nice day.
References
https://velog.io/@sdb016/RabbitMQ-%EA%B8%B0%EC%B4%88-%EA%B0%9C%EB%85%90
'IT > DevOps \ Architecture' 카테고리의 다른 글
Circuit Breaker, 순간아 멈추어라! (0) | 2023.03.14 |
---|---|
Vault, HashiCorp와 비밀의 방 (3) | 2023.03.12 |
VirtualBox, 광활한 오픈월드 속으로 (0) | 2023.03.10 |
불변성(Immutability), 변하지 않는 것 (0) | 2023.02.15 |
MSA | Netflix OSS로 보는 MSA의 골격 (0) | 2022.10.27 |