producer

Producer

broker로 메시지를 보내는 클라이언트 모듈입니다. 간단한 HTTP POST 인터페이스에 빌더로 설정한 재시도 정책을 더해 메시지를 안정적으로 전달합니다.

개요

producer는 사용자 애플리케이션에서 broker로 메시지를 보낼 때 쓰는 가장 작은 API입니다. 내부에서는 Spring RestClient로 broker의 POST /messages 엔드포인트를 호출합니다.

발행은 동기로 동작합니다. broker가 NACK를 돌려주면 빌더에 지정한 횟수만큼 재시도하고, 그래도 실패하면 ProduceException을 던집니다.

참고
producer 자체는 백오프 지연을 두지 않습니다. 순서 보장과 재시도 간격은 broker가 담당합니다.

기능

  • 동기 발행produce(Message) 한 번으로 ACK/NACK까지 처리합니다
  • 빌더 구성 — Host, maxRetryCount 같은 옵션을 불변 빌더로 설정합니다
  • NACK 자동 재시도 — 기본 3회, 모두 실패하면 ProduceException
  • HTTP 송신 — Spring RestClient로 broker와 통신합니다
  • JSON 직렬화 — Jackson 기본 설정을 그대로 사용합니다

설치

mmmq는 JitPack으로 배포됩니다. build.gradle에 저장소와 의존성을 추가해 주세요.

build.gradle (Groovy DSL)

build.gradle
repositories {
    mavenCentral()
    maven { url "https://jitpack.io" }
}

dependencies {
    implementation "com.github.moko-meringue.mmmq:producer:0.0.1"
}

build.gradle.kts (Kotlin DSL)

build.gradle.kts
repositories {
    mavenCentral()
    maven("https://jitpack.io")
}

dependencies {
    implementation("com.github.moko-meringue.mmmq:producer:0.0.1")
}

설정

producer는 application.yml에 별도 설정 키가 없습니다. Producer 빈을 만들 때 빌더로 모든 옵션을 정합니다.

Spring Bean 등록

Java · @Configuration
@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()를 호출하면 끝입니다.

Java
@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.