QUICKSTART

Hello, mmmq!

hello.mmmq 토픽으로 메시지 한 건을 주고받는 예제입니다.
broker - consumer - producer 세 Spring Boot 애플리케이션을 실행시킵니다.

STEP 1 · BROKER

Broker 애플리케이션

메시지를 받아 디스크에 영속하고 consumer에게 전달하는 중앙 서버입니다.
broker 모듈을 추가한 Spring Boot 애플리케이션을 준비하고, MMMQConfiguration에 Dispatcher 빈을 등록합니다.

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

dependencies {
    implementation "com.github.moko-meringue.mmmq:broker:0.0.1"
}
application.yml
server:
  port: 8080
MMMQConfiguration.java
@Configuration
public class MMMQConfiguration {

    @Bean
    public Dispatcher helloDispatcher() {
        return new Dispatcher(
                "hello-dispatcher",
                new Host(WebProtocol.HTTP, "localhost", 8080),
                List.of(new TopicPattern("hello.*"))
        );
    }
}
STEP 2 · CONSUMER

Consumer 애플리케이션

broker에서 메시지를 받아 처리하는 클라이언트입니다.
consumer 모듈을 추가한 Spring Boot 애플리케이션을 준비하고, hello.mmmq 토픽을 구독하는 핸들러를 등록합니다.

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

dependencies {
    implementation "com.github.moko-meringue.mmmq:consumer:0.0.1"
}
application.yml
server:
  port: 8082
HelloHandler.java
@Service
public class HelloHandler {

    @MMMQListener("hello.mmmq")
    public void handleMessage(Object content) {
        System.out.println("Received: " + content);
    }
}
STEP 3 · PRODUCER

Producer 애플리케이션

broker로 메시지를 보내는 클라이언트입니다.
producer 모듈을 추가한 Spring Boot 애플리케이션을 준비하고, Producer 빈을 등록합니다.
HelloControllerPOST /messages로 받은 요청 본문을 hello.mmmq 토픽으로 발행합니다.

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

dependencies {
    implementation "com.github.moko-meringue.mmmq:producer:0.0.1"
}
application.yml
server:
  port: 8081
MMMQConfiguration.java
@Configuration
public class MMMQConfiguration {

    @Bean
    Producer producer() {
        return Producer.builder(new Host(WebProtocol.HTTP, "localhost", 8080))
            .build();
    }
}
HelloController.java
@RestController
public class HelloController {

    private final Producer producer;

    public HelloController(Producer producer) {
        this.producer = producer;
    }

    @PostMapping("/messages")
    public void sendHello(@RequestBody Object content) {
        Message message = new Message(
                new Topic("hello.mmmq"),
                content
        );
        producer.produce(message);
    }
}
STEP 4 · RUN

실행

모든 애플리케이션을 실행한 다음, producer 애플리케이션의 /messages 엔드포인트로 POST 요청을 보냅니다.
요청 본문이 메시지로 발행되고, 구독 중인 consumer가 그 메시지를 받아 콘솔에 출력합니다.

메시지 발행 요청
$ curl -X POST http://localhost:8081/messages \
       -H "Content-Type: application/json" \
       -d '"Hello, mmmq!"'
consumer 애플리케이션 콘솔
Received: Hello, mmmq!
BEYOND HELLO

더 복잡한 시스템 구축하기

자세한 기능은 문서에서 확인할 수 있습니다.
재시도 정책, 패턴 기반 구독, 영속화 등, mmmq가 제공하는 다양한 기능으로 더 복잡한 메시징 시스템을 구축해보세요.