Consumer
broker가 보낸 메시지를 받아 패턴에 맞는 핸들러로 라우팅하는 모듈입니다. 어노테이션과 인터페이스 두 가지 등록 방식, 그리고 자동 ACK/NACK 응답을 제공합니다.
개요
consumer는 broker가 보낸 메시지를 POST /messages로 받고,
등록된 핸들러 중 토픽 패턴이 매칭되는 것을 호출합니다.
내부에서는 FrontHandler가 ArrayBlockingQueue(1000)과
ThreadPoolExecutor(2-5)를 활용해 메시지를 비동기로 처리하고, 핸들러 호출 결과에 따라
ACK 또는 NACK를 broker에 돌려줍니다.
order.*, ** 같은 표현을 사용할 수 있습니다.
기능
- 두 가지 등록 방식 —
@MMMQListener어노테이션 또는MMMQListener<T>인터페이스 구현 - 패턴 매칭 라우팅 — 토픽이 패턴에 매칭되는 핸들러로 자동 분배
- 자동 ACK/NACK — 핸들러 정상 종료 시 ACK, 예외 시 NACK 응답
- 비동기 처리 — BlockingQueue + ThreadPoolExecutor 기반
- POJO 매핑 — Jackson을 통한 JSON ↔ POJO 자동 변환
설치
JitPack 저장소와 consumer 아티팩트를 추가합니다.
build.gradle
repositories { mavenCentral() maven { url "https://jitpack.io" } } dependencies { implementation "org.springframework.boot:spring-boot-starter-web" implementation "com.github.moko-meringue.mmmq:consumer:0.0.2" }
설정
consumer는 broker가 호출하는 HTTP 엔드포인트(POST /messages)를 자동으로 노출합니다.
mmmq.consumer.* 같은 별도 키는 없고, Spring Boot의 server.port가 곧 consumer의 수신
포트입니다.
application.yml
server: port: 8081 # broker가 이 포트로 메시지를 보냅니다
Dispatcher 빈에 등록한 consumer Host(포트)가 여기서 띄운 server.port와
일치해야 합니다.
사용 예제
방식 1 — 어노테이션 (가장 간단)
일반 Spring Bean 메서드에 @MMMQListener를 붙이면 자동으로 등록됩니다.
@Service public class OrderService { @MMMQListener("order.*") public void handleOrder(Order order) { // JSON 페이로드가 Order로 자동 역직렬화 } @MMMQListener("payment.*") public void handlePayment(Map<String, Object> payment) { // Map으로 받아도 OK } @MMMQListener // 패턴 생략 시 "**" (전체 토픽) public void handleAll(Object content) { } }
방식 2 — 인터페이스 구현 (타입 안전)
제네릭 타입 정보를 컴파일 타임에 보존하고 싶을 때 사용합니다.
@Service public class PaymentService implements MMMQListener<PaymentEvent> { @Override public TopicPattern listens() { return new TopicPattern("payment.*"); } @Override public void handle(PaymentEvent event) { // 런타임 제네릭 해석으로 PaymentEvent 그대로 받음 } }
API 레퍼런스
핵심 클래스/어노테이션
| 요소 | 설명 |
|---|---|
@MMMQListener(String pattern) |
메서드를 메시지 핸들러로 등록. 패턴 생략 시 **. |
MMMQListener<T> |
인터페이스 등록 방식. listens() + handle(T). |
FrontHandler |
수신 큐 + 스레드 풀로 메시지를 비동기 처리. |
HandlerExecutions |
등록된 핸들러 레지스트리. 패턴 매칭 + 캐싱. |
패턴 매칭 표
| 패턴 | 매칭 예 |
|---|---|
order.* |
order.created, order.shipped |
payment.kakao.* |
payment.kakao.success |
** |
모든 토픽 |