RabbitMQ
Lumie 플랫폼의 이벤트 기반 아키텍처를 위한 메시지 브로커입니다. RabbitMQ Cluster Operator를 사용하여 고가용성 클러스터로 운영됩니다.
아키텍처
클러스터 구성
- 복제본: 1 (단일 인스턴스)
- 이미지:
zot.lumie-infra.com/library/rabbitmq:4.1-management - 네임스페이스:
lumie-event - 오퍼레이터: RabbitMQ Cluster Operator v2.19.0 + Messaging Topology Operator v1.17.0
메시지 토폴로지
익스체인지
| 이름 | 타입 | 용도 |
|---|---|---|
lumie.commands | direct | 작업 요청/콜백 라우팅 |
lumie.dlx | topic | 데드 레터 처리 (서비스 접두사 와일드카드) |
큐
| 큐 이름 | 타입 | 용도 | TTL |
|---|---|---|---|
grading.omr-request | quorum | OMR 채점 요청 (BE → grading-svc) | 10분 |
grading.omr-request.dlq | quorum | OMR 요청 실패 메시지 | - |
grading.omr-completed | quorum | OMR 채점 완료 알림 (선언됨, 현재 미사용) | - |
grading.omr-callback | quorum | 채점 결과 콜백 (grading-svc → BE) | 10분 |
report.generation-request | quorum | 성적표 생성 요청 (BE → report-svc) | 30분 |
report.generation-request.dlq | quorum | 성적표 요청 실패 메시지 | - |
report.generation-callback | quorum | 성적표 생성 콜백 (report-svc → BE) | 30분 |
dlq.failed-messages | quorum | 전체 실패 메시지 캐치올 | - |
바인딩
설정
클러스터 설정
cluster_partition_handling = autoheal
queue_master_locator = min-masters
vm_memory_high_watermark.relative = 0.7
vm_memory_high_watermark_paging_ratio = 0.75
log.console = true
log.console.level = info
load_definitions = /etc/rabbitmq/definitions/definitions.json
플러그인
rabbitmq_management: 웹 관리 인터페이스rabbitmq_prometheus: 메트릭 수집rabbitmq_auth_backend_oauth2: Keycloak OIDC 인증 (management UI)
리소스 할당
resources:
requests:
cpu: 22m
memory: 138Mi
limits:
memory: 384Mi
보안
인증
RabbitMQ 사용자는 Messaging Topology Operator의 User CR로 관리됩니다. 오퍼레이터가 자격 증명을 생성하여 <name>-user-credentials Secret에 저장합니다. Vault에는 미러링하지 않습니다.
| 사용자 | 태그 | 권한 | 자격 증명 소스 |
|---|---|---|---|
lumie | administrator | configure/write/read .* | Topology Operator Secret |
grading-svc | (없음) | configure/write/read .* | Topology Operator Secret |
report-svc | (없음) | configure/write/read .* | Topology Operator Secret |
Vault 통합 (Topology Operator 연결용)
Topology Operator가 브로커 management API에 접근하기 위한 연결 시크릿은 Vault에서 프로젝션됩니다:
# platform/rabbitmq/base/vault-static-secret.yaml
# Vault 경로: secret/infrastructure/rabbitmq
# → Secret 'rabbitmq-topology-auth' (username/password/uri)
vaultAuthRef: vault/vault-auth
path: infrastructure/rabbitmq
destination:
name: rabbitmq-topology-auth
OAuth2 / OIDC
RabbitMQ management UI는 Keycloak infra realm을 통해 OIDC 인증을 지원합니다. AMQP 프로토콜 인증은 내부 사용자(internal 백엔드)가 폴백으로 작동합니다.
모니터링
메트릭
- Prometheus 플러그인을 통한 메트릭 노출
- 큐 길이, 메시지 처리율, 클러스터 상태 등 모니터링
로깅
RabbitMQ 클러스터 설정에 따라 콘솔 로깅이 활성화됩니다.
log.console = true
log.console.level = info
운영
배포
ArgoCD를 통해 자동 배포되며, 다음 구성 요소들이 포함됩니다:
- ConfigMap: 메시지 토폴로지 정의 (
load_definitions를 통해 로드) - RabbitmqCluster: 클러스터 리소스
- VaultStaticSecret: 인증 정보
고가용성
- 쿼럼 큐: 데이터 일관성 보장
- 클러스터 파티션 처리:
autoheal모드 - 메모리 관리: 70% 임계값으로 백프레셔 적용
장애 복구
- 데드 레터 큐: 실패한 메시지 자동 라우팅
- 메시지 TTL: 10분 후 자동 만료
- 클러스터 자동 복구: 파티션 발생 시 자동 치유