Subscriber

Consumer

  • 에플리케이션이 메시지를 사용할 수 없다면, Queue에 메시지를 저장하는것은 불필요함
  • AMQP 0-9-1 모델에는 Subscribe과 Polling이 있음
    • 애플리케이션이 메시지를 전달받도록 하는 Subscribe 방식 - 권장 옵션
    • 비효율적이며 대부분의 경우 피해야하는 Polling 방식
  • Push API를 사용하면 애플리케이션이 특정 Queue에 Subscriber를 등록하거나, Queue에 가입해야함
  • Queue에 두명 이상의 consumer를 등록하거나, exclude consumer를 등록할 수 있음
  • 각 consumer는 consumer tag라는 문자열로된 식별자가 존재함
    • 이 식별자는 메시지 수신을 취소하는데 사용할 수 있음

Rejecting Messages

  • consumer 애피리케이션이 메시지를 받을 때, 메시지 처리가 성공 할 수도, 실패할 수도 있음
  • 애플리케이션은 메시지를 거부하므로써 브로커에게 메시직 처리가 실패했음을 알릴 수 있음
  • 메시지를 거부할 때 브로커에게 메시지를 폐기하거나, 다시 Queue에 넣도록 요청할 수 있음
  • 대기열에 소비자가 한명 만 있는경우, 동일 소비자의 메시지를 거부했다가 다시 queue에 넣는 무한루프를 만들지 않도록 주의해야함

Prefetching Message

  • 여러 Consumer가 하나의 queue를 공유할때, 다음 ACK를 보내기전에 각 소비자가 한번에 처리할 수 있는 메시지 수를 지정하는것은 유영함
  • 간단히 부하분산 기술로 사용하거나, 메시지가 일괄적으로 publish되는 경항이 있는경우 처리량 개선에 사용할 수 있음
  • 예를들어, publisher특성상 매분 메시지를 전송하는 경우 유용함
  • RabbitMQ는 채널 레벨 prefetch만 지원하고, 연결 또는 크기기반 prefetch는 지원하지 않음

기본 설정

  • Queue 바인딩: 어떤 Queue의 메시지를 받을지 설정
  • Message Listener: 메시지를 받아 처리하는 메소드 구현
  • Container Factory: 메시지 컨테이너 생성을 위한 팩토리 설정

고급 설정

  • Concurrency: 동시에 처리할 메시지 수
  • Error Handling: 오류 처리 (Retry, Dead-Letter Exchange, Error Queue, Circuit Breaker)
  • Transaction: 트랜잭션 관리
  • Acknowledgment: 메시지 처리 확인
  • Prefetch Count: 미리 가져올 메시지 수
  • Dead-Letter Exchange: 처리 실패 메시지 보낼 DLX 설정
  • Message Converter: 메시지 형식 변환

심화 설정 및 고려사항

  • 메시지 처리 전략: Pull vs Push, Batch 처리, Parallel 처리, Message Sequencing, Deduplication, Prioritization, Asynchronous Processing
  • 오류 처리 심화: Retry Strategies, Circuit Breaker Pattern, Bulkhead Pattern, Resilience4j
  • 성능 최적화: Batching, Compression, Caching, Profiling
  • 확장성: Horizontal Scaling, Sharding, Load Balancing
  • 보안: TLS/SSL, Access Control, Authentication, Authorization
  • 모니터링: Metrics, Logging, Alerting, Distributed Tracing
  • 특수 기능: Delayed Messages, Scheduled Messages, Message Routing
  • 클라우드 환경: Serverless Functions, Managed Messaging Services, Cloud-Native Patterns
  • 테스트: Unit Test, Integration Test, Chaos Engineering, Mutation Testing
  • 패턴: Observer Pattern, Strategy Pattern, Actor Model, CQRS

추가 키워드

  • Consumer Tag: 소비자 식별
  • Channel: 메시지 채널
  • Ack: 메시지 처리 성공 확인
  • Nack: 메시지 처리 실패 확인
  • Requeue: 메시지 다시 큐에 넣기
Hugo로 만듦
JimmyStack 테마 사용 중