Inflearn brand logo image

인프런 커뮤니티 질문&답변

나마스테님의 프로필 이미지
나마스테

작성한 질문수

RabbitMQ를 이용한 비동기 아키텍처 한방에 해결하기

20.DB 연동 메시지큐의 트랜잭션 처리 실습

컨슈머 서버 질문드립니다

해결된 질문

작성

·

42

0

안녕하세요
@RabbitListener(queues = LogRabbitMQConfig.ERROR_QUEUE) public void consumeError(String message) { System.out.println("[ERROR]를 받음 : " + message); } @RabbitListener(queues = LogRabbitMQConfig.WARN_QUEUE) public void consumeWarn(String message) { System.out.println("[WARN]를 받음 : " + message); } @RabbitListener(queues = LogRabbitMQConfig.INFO_QUEUE) public void consumeInfo(String message) { System.out.println("[INFO]를 받음 : " + message); } @RabbitListener(queues = LogRabbitMQConfig.ALL_LOG_QUEUE) public void consumeAllLog(String message) { System.out.println("[LOG]를 받음 : " + message); }

의 코드처럼 하나의 어플리케이션에서 여러개를 구독하고 있는데

실제 현업에서도 하나의 어플리케이션에서 여러개의 메세지를 구독하여 각각 서비스를 처리하나요?

예를들면 문자메세지를 발송하는 외부업체에 api를 쏘는 리스너가있고

슬랙api를 통해 error 정보를 쏘는 리스너가있고
등등 .. 다양한 리스너를 하나의 애플리케이션 서버에서 처리하는지 궁금합니다

답변 2

0

코드빌런님의 프로필 이미지
코드빌런
지식공유자

안녕하세요. 수강자님

 

서비스가 복잡해질수록 발행하는 이벤트도 다양해지고 받는 쪽, 컨슈머도 이에 비례해서 증가하기 마련입니다.

 

싱글 도메인에 단순 비동기라면 적은 수의 메시지로도 문제가 없겠지만 복잡한 메시징 전송이나 상태 전송, 메시지의 컨펌 등 여러 레이어에 걸쳐 처리해야 할 경우 엠큐의 효과가 극대화 됩니다.

브로드캐스팅 뿐 아니라 pub sub도 여러 도메인에서 활용 가능하므로 사용하기 나름입니다

감사합니다

0

안녕하세요, 인프런 AI 인턴입니다. 나마스테님.

질문해주신 내용은 RabbitMQ를 포함한 메시지 브로커 환경에서 메시지 소비(Consume)와 관련된 실무적 측면에 대한 것입니다.

실제 현업에서는 하나의 애플리케이션에서 여러 개의 큐를 통해 메시지를 구독하고 다양한 서비스를 처리하는 경우가 많습니다. 이는 시스템의 요구사항 및 아키텍처 설계에 따라 다르지만, 보편적인 시나리오를 설명드리겠습니다:

다중 큐 및 컨슈머 형태

  1. 하나의 서비스에서 여러 큐를 구독:

    • 하나의 애플리케이션 서비스가 다양한 메시지 소비 패턴을 요구할 수 있습니다. 예를 들어 로그 수준별로 에러, 경고, 정보 메시지를 각각 처리함으로써 서비스의 역할을 분리하는 것입니다.
  2. 다양한 리스너 역할:

    • 각 큐는 특정 유형의 작업을 구현하는 메서드에 바인딩될 수 있습니다. 예를 들어, 하나의 리스너는 외부 문자 메시지를 발송하고, 다른 리스너는 슬랙 API를 통해 특정 오류 정보를 전송하기 위한 역할을 맡을 수 있습니다.
  3. 메시지 지향 아키텍처 설계 장점:

    • 이러한 방식은 애플리케이션 개발을 모듈화하고 서비스를 격리하는 데 도움을 줍니다. 이는 서비스 지향 아키텍처나 MSA 환경에서 각 서비스의 독립성과 유지보수성을 높이는 데 기여할 수 있습니다.

채택 이유

  • 효율성: 동일 프로세스에서 복수의 큐를 관리함으로써 시스템 리소스를 효율적으로 활용하고 메시지 처리량을 높일 수 있습니다.
  • 유지보수 용이성: 각 큐가 단일 책임 원칙에 따라 특화된 작업을 처리하기 때문에 모듈의 독립성이 증가됩니다.
  • 확장성: 각 큐의 소비 로직이 명확히 분리되어 있어 특정 큐 또는 서비스의 로드를 줄이거나 확장하기도 쉽습니다.

이렇게 다양한 역할을 가진 리스너들이 하나의 애플리케이션에서 처리되는 경우는 비교적 일반적이지만, 시스템의 복잡성이 증가하는 경우 서비스 단위로 별개의 애플리케이션을 통해 메시지를 소비하는 방식도 고려될 수 있습니다.

이 내용을 더 잘 이해하기 위해 다음의 관련 질문을 참고하시기 바랍니다:
- “MSA 환경에서 브로드캐스트는 어떻게 이루어지나요?” 질문과 답변

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

나마스테님의 프로필 이미지
나마스테

작성한 질문수

질문하기