Producer
broker로 메시지를 보내는 클라이언트 모듈입니다. 간단한 HTTP POST 인터페이스에 빌더로 설정한 재시도 정책을 더해 메시지를 안정적으로 전달합니다.
개요
producer는 사용자 애플리케이션에서 broker로 메시지를 보낼 때 쓰는 가장 작은 API입니다.
내부에서는 Spring RestClient로 broker의 POST /messages 엔드포인트를 호출합니다.
발행은 동기로 동작합니다. broker가 NACK를 돌려주면 빌더에 지정한 횟수만큼 재시도하고,
그래도 실패하면 ProduceException을 던집니다.
기능
- 동기 발행 —
produce(Message)한 번으로 ACK/NACK까지 처리합니다 - 빌더 구성 — Host, maxRetryCount 같은 옵션을 불변 빌더로 설정합니다
- NACK 자동 재시도 — 기본 3회, 모두 실패하면
ProduceException - HTTP 송신 — Spring
RestClient로 broker와 통신합니다 - JSON 직렬화 — Jackson 기본 설정을 그대로 사용합니다
설치
mmmq는 JitPack으로 배포됩니다.
build.gradle에 저장소와 의존성을 추가해 주세요.
build.gradle (Groovy DSL)
repositories { mavenCentral() maven { url "https://jitpack.io" } } dependencies { implementation "com.github.moko-meringue.mmmq:producer:0.0.1" }
build.gradle.kts (Kotlin DSL)
repositories { mavenCentral() maven("https://jitpack.io") } dependencies { implementation("com.github.moko-meringue.mmmq:producer:0.0.1") }
설정
producer는 application.yml에 별도 설정 키가 없습니다.
Producer 빈을 만들 때 빌더로 모든 옵션을 정합니다.
Spring Bean 등록
@Configuration public class ProducerConfig { @Bean public Producer producer() { Host brokerHost = new Host(WebProtocol.HTTP, "localhost", 8080); return Producer.builder(brokerHost) .maxRetryCount(5) // 기본 3 .build(); } }
설정 가능한 빌더 옵션
| 옵션 | 타입 | 기본값 | 설명 |
|---|---|---|---|
builder(Host) |
Host |
— | broker의 프로토콜·호스트·포트. |
maxRetryCount(int) |
int |
3 |
NACK 응답에 대한 재시도 횟수. |
사용 예제
가장 짧은 사용 예제입니다. Producer 빈을 주입받아 produce()를 호출하면 끝입니다.
@Service public class OrderEventPublisher { private final Producer producer; public OrderEventPublisher(Producer producer) { this.producer = producer; } public void publishOrderCreated(long orderId, String customer) { producer.produce(new Message( new Topic("order.created"), Map.of("id", orderId, "customer", customer) )); } }
produce()는 동기로 동작합니다. 재시도까지 모두 실패하면 ProduceException이 던져지므로
호출 측에서 적절히 처리해 주세요.
API 레퍼런스
producer가 노출하는 클래스와 주요 메서드입니다.
핵심 클래스
| 클래스 | 설명 |
|---|---|
Producer |
메시지 발행 클라이언트. |
Producer.Builder |
Producer를 구성하는 빌더. |
ProduceException |
모든 재시도가 실패한 경우 던져지는 예외. |
주요 메서드
| 시그니처 | 반환 | 설명 |
|---|---|---|
Producer.builder(Host) |
Producer.Builder |
빌더 시작. |
Builder.maxRetryCount(int) |
Producer.Builder |
NACK 재시도 횟수 설정. |
Builder.build() |
Producer |
설정 확정 후 인스턴스 생성. |
Producer.produce(Message) |
void |
메시지 발행. 실패 시 ProduceException. |