Amazon MQ
AWS에서 운영하는 클라우드 기반의 관리형 메시지 브로커 서비스이며 Apache ActiveMQ 기반으로 서비스하고 있다.
- Producer : 메시지 발행자
- Broker(Queue) : 메시지 전달자
- Consumer : 메시지 수신자
큰 흐름은 위의 이미지와 같이 Producer가 발행 한 메시지를 Broker에게 전달해 주고 Broker는 메시지를 순차적으로 저장하고 Consumer로 메시지를 순차적으로 전달 / 수신하는 방식이다.
JMS (Java Message Service)
자바 기반의 MOM(Message Oriented Middleware) API 표준이며 자바 플랫폼, 엔터프라이즈 에디션 기반이고, 메시지 생성, 송수신, 읽기를 한다.
AcitveMQ의 JMS Library를 사용하여 자바 어플리케이션간의 통신이 가능하다.
Spring Framwork에서 JMS를 이용하여 간단하게 ActiveMQ를 구성할 수 있다.
JMS Message에는 헤더와 본문 정보를 담고 있으며, 헤더에는 JMS 메시지 필수 값과 메시지 경로, 식별 값 등이 저장이 되고 본문에는 메시지를 정보 값들이 저장되어 있다.
Queue, Topic
메시지 전달 방식으로는 Queue와 Topic 방식이 있다.
- Queue : Point to Point 방식으로 한 개의 메시지를 하나의 Consumer만 수신할 수 있습니다. 메시지에 의한 데이터 처리를 반드시 하나의 서비스에서 실행을 해야 하는 경우에 Queue 구조로 설정하면 된다.
- Topic : Publicsh to Subscribe 방식으로 한개의 메시지를 다수 Consumer가 수신할 수 있다. 메시지에 의한 데이터 처리를 다수의 Consumer가 실행되어야 하는 경우에 Topic 구조로 설정하면 된다.
MQ의 장점
- 비동기 : 클라이언트와 서버 통신 비동기 통신이 되면서 클라이언트와 서버간의 요청에 의한 기다림 없이 다른 작업을 수행할 수 있다.
- 분리 : 어플리케이션으로 부터 분리가 되며 하나의 시스템의 장애는 다른 대기열에 영향을 주지 않는다.
- 복구 : Queue 메시지가 처리가 실패되면 recover 전략을 통하여 언제든 재처리가 가능하다.
- 신뢰 : 메시지가 정상 처리가 되었는지 확인이 가능하다.
- 확장 : 다양한 언어와 프로토콜을 지원한다.
ActiveMQ의 기본적인 구성과 역할 및 내용에 대해 기록해봤다. MQ 서비스는 AcitveMQ 이외에도 RabbitMQ, Kafka 등 다양하고 각각의 특징들이 있으므로 개발하는 서비스와 어떤 미들웨어 프레임워크가 맞는지를 고려해야 한다.
나는 Spring Boot와 ActiveMQ를 구성했었는데 속도 보단 신뢰성과 심플한 구성을 원했기 때문에 Kafka 보단 ActiveMQ를 선택했고 이 서비스를 구성할 당시에는 AWS에서 RabbitMQ를 지원하지 않아서 선택사항이 없었다. 그때 당시 RabbitMQ가 있었다면 RabbitMQ를 사용했을 것 같다.
ActiveMQ 기능에 대해 까먹기 전에 더 기록하고 싶은 내용들이 있는데 이건 나중에 기록해봐야겠다.
'Spring' 카테고리의 다른 글
[Spring] Javers로 자바 객체 비교 쉽게 하자! (0) | 2022.11.11 |
---|---|
[Spring] Amazon MQ (Active MQ) : Virtual Destinations 기능 (0) | 2022.11.10 |
[Spring] Amazon MQ (Active MQ) : Consumer 운영 (1) | 2022.11.10 |
[Spring] Amazon MQ (Active MQ) : 개발 (0) | 2022.11.09 |
Webflux +Reactive Feign 적용 (0) | 2022.11.07 |
댓글