일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- Animation
- 자바스크립트
- spring boot
- Maui
- 파이어베이스
- typescript
- Binding
- Flutter
- 닷넷
- MVVM
- AnimationController
- 플러터
- listview
- db
- MSSQL
- 함수
- .NET
- 마우이
- Firebase
- HTML
- 깃허브
- 리엑트
- 바인딩
- GitHub
- JavaScript
- 애니메이션
- MS-SQL
- page
- 오류
- React JS
Archives
- Today
- Total
개발노트
1. [RabbitMQ] Producer, Consumer 개념 본문
반응형
메시지 큐 흐름도
- Client → Producer : 메시지 요청
- Producer → Exchange (Routing Key 사용) → Queue (Binding Key 기준 라우팅)
- Queue → Consumer (라운드 로빈으로 분배)
- Consumer: 메시지 처리 후 ACK 전송
기본 개념 정리
- Exchange (교환기):
- Producer 가 발행한 메시지를 어느 큐로 전달할지 결정하는 역할을 합니다.
- Exchange는 메시지를 받아 특정 조건에 따라 큐로 메시지를 라우팅합니다.
- RabbitMQ에서는 여러 유형의 Exchange가 있으며, 가장 일반적인 유형은 다음과 같습니다:
- Direct Exchange: 특정 Routing Key를 가진 메시지를 해당 키와 일치하는 큐에 전달합니다.
- Topic Exchange: 패턴을 사용해 라우팅을 하며, 특정 주제와 연관된 메시지를 여러 큐로 전달합니다.
- Fanout Exchange: 라우팅 키 없이 모든 연결된 큐에 메시지를 브로드캐스팅합니다.
- Headers Exchange: 메시지의 헤더를 기반으로 라우팅합니다.
- Routing Key (라우팅 키):
- Producer 가 메시지를 Exchange에 보낼 때 지정하는 키로, 메시지가 어떤 큐로 가야 하는지 결정하는 데 사용됩니다.
- 특정 큐와 연결된 Routing Key가 Exchange의 라우팅 기준이 됩니다.
- Binding Key (바인딩 키):
- 큐와 Exchange 사이를 연결하는 키로, Exchange에서 특정 Routing Key를 가진 메시지를 받아야 할 큐를 정의합니다.
- Binding Key와 Routing Key가 일치할 때 메시지가 해당 큐로 전달됩니다.
상세 메시지 흐름
- 클라이언트(Client)가 Producer 에게 메시지 요청
- 클라이언트가 Producer 에게 작업 요청을 합니다. Producer 는 요청을 받아 메시지를 생성하고 Exchange로 전송할 준비를 합니다.
- Producer 가 Exchange로 메시지 발행 및 라우팅 (Routing Key 포함)
- Producer 는 메시지를 특정 Routing Key와 함께 Exchange에 발행합니다.
- 예를 들어, Routing Key가 task.queue1이라면, 이 키를 Exchange에 전달하여 특정 큐로 라우팅하도록 합니다.
- Exchange가 Binding Key를 기반으로 메시지를 큐로 전달
- Exchange는 지정된 Routing Key를 보고, Binding Key와 일치하는 큐에 메시지를 전달합니다.
- Direct Exchange에서 task.queue1이라는 Routing Key를 가진 메시지는 동일한 Binding Key를 가진 큐로만 전달됩니다.
- Topic Exchange를 사용하면 task.*와 같은 패턴으로 여러 큐로 메시지를 보낼 수 있습니다.
- Consumer가 큐에서 메시지를 수신 (라운드 로빈 분배)
- 여러 Consumer가 동일한 큐를 구독하는 경우, RabbitMQ는 기본적으로 라운드 로빈 방식으로 메시지를 분배합니다. 즉, 첫 번째 메시지는 첫 번째 Consumer에게, 두 번째 메시지는 두 번째 Consumer에게 전달됩니다.
- 이 방식으로 각 Consumer는 고르게 메시지를 수신하게 됩니다.
- Consumer가 메시지를 처리하고 Acknowledgement (ACK) 전송
- Consumer가 메시지를 정상적으로 처리한 후, RabbitMQ에 ACK를 전송합니다.
- ACK는 RabbitMQ에게 해당 메시지가 성공적으로 처리되었음을 알리는 역할을 하며, 이를 통해 메시지가 안전하게 큐에서 삭제될 수 있습니다.
- 만약 Consumer가 메시지 처리를 완료하지 못하고 실패하면, RabbitMQ는 ACK를 받지 못하므로 해당 메시지를 다른 Consumer에게 다시 전달하거나 큐에 남겨두게 됩니다.
- Message Acknowledgement (메시지 확인)
- RabbitMQ는 기본적으로 Consumer에게 ACK가 도착할 때까지 메시지를 큐에 유지합니다.
- 이 기능을 통해 Consumer가 메시지 처리 중 장애가 발생할 경우, 메시지 손실을 방지하고 다른 Consumer에게 재처리를 위임할 수 있습니다.
반응형
Comments