RabbitMQ
RabbitMQ
- 개요
- 메시지 큐 시스템: SW간 비동기 메시지 통신을 위한 SW
- Erlang으로 AMQP(Advanced Message Queuing Protocol) 구현한 메시지 브로커 시스템
- AMQP: client application과 middleware broker와의 메시지를 주고 받기 위한 프로토콜
- 서버간 메시지를 전달해주는 오픈소스 메시지 브로커
- A->B, A->B,C,D,E,F... 등 메시지 보내려고 할 때 RabbitMQ가 메시지 받아서 전달
- 사용처
- 요청을 많은 사용자에게 전달할 때
- 요청에 대한 처리시간이 길 때
- 많은 작업이 요청되어 처리를 해야할 때
- 장점
- 해당 요청을 다른 API에게 위임하고 빠른 응답을 할 때 많이 사용됨
- MQ를 통해 어플리케이션간에 결합도를 낮출 수 있음
- 아키텍처

- Producer가 메시지를 보내면, exchange에서 해당하는 키에 맞게 queue에 분배하고, 해당 queue에서 Consumer가 메시지 받음
- producer: 메세지를 보내는 아이
- exchange: 메시지를 목적지(큐)에 맞게 전달하는 아이
- queue: 메시지를 쌓는 아이
- consumer: 메시지를 받는 아이


- producer/consumer는 역할의 구분임

- producer: 요청 보내는 주체, 보내고자 하는 메시지를 excahnge에 publish
- consumer: producer로 부터 메시지를 받아 처리하는 주체
- exchange: producer로 부터 전달받은 메시지를 어떤 queue로 보낼지 결정 (4가지 타입)
- Name: Exchange 이름
- Type: 메시지 전달 방식 (Direct, Fanout, Topic, Headers)
- Durability: 브로커 재시작될 때 남아있을지의 여부 (Durable, Transient)
- Auto-delete: 마지막 queue 연결이 해제되면 삭제
- queue: consumer가 메시지를 consume하기 전까지 보관하는 장소
- Name: Queue 이름
- Durability: 브로커가 재시작될 때 남아있는지 여부 (Durable, Transient)
- Auto-delete: 마지막 consumer가 consume을 끝낼 경우 자동 삭제
- Argument: 메시지 TTL, MaxLength 같은 추가 기능 명시
- binding: exchange와 queue의 관계
- Exchange와 Queue를 연결하는 관계
- Exchange 타입과 binding 규칙에 따라 적절한 queue로 전달
- exchange의 4가지 타입
- Fanout

- exchange와 binding된 모든 queue에게 동일한 메시지를 보냄. (전체메시지)
- Direct

- routing key를 활용해 큐와 직접 바인딩할 수 있음
- 각 큐의 이름이 routing key로 지정됨
- 하나의 큐에 여러 routing key를 지정할 수 있고,
- 여러 큐에 하나의 routing key를 지정할 수도 있음
- Topic

- Routing key의 패턴이 일치하는 큐에 메시지 전달
*: 단어 1개를 대체
#: 0개 이상의 단어를 대체
- Headers

- Key-Value로 정의된 헤더에 의해 메시지를 큐에 전달
- 메시지 전달하는 Producer 측에서 정의하는 header의 k-v와 메시지를 받는 consumer쪽에서 정의된 k-v 일치하면 바인딩
- 메세징 플랫폼
- 참고: https://www.youtube.com/watch?v=H_DaPyUOeTo&t=20s
1. 메시지 브로커 (레디스큐, RabbitMQ)
- 이벤트 브로커 역할 X
- 미들웨어로 동작
- 메시지 받아서 적절히 처리하고 나면, 즉시 삭제되는 구조
- 데이터를 보내고, 처리하고, 삭제한다
2. 이벤트 브로커 (Kafka)
- 얘는 메시지 브로커 역할도 수행 가능
- 이벤트(메시지)라 불리는 레코드를 딱 하나만 저장
- 업무상 필요한 시간동안 이벤트 보존
- 얘는 데이터 삭제 안 해
- 단일 진실 공급원
- 장애에 대해 복구 포인트
- 많은 양의 스트림 포인트로써 가동