Hello, mmmq!
hello.mmmq 토픽으로 메시지 한 건을 주고받는 예제입니다.
broker - consumer - producer 세 Spring Boot 애플리케이션을 실행시킵니다.
Broker 애플리케이션
메시지를 받아 디스크에 영속하고 consumer에게 전달하는 중앙 서버입니다.
broker 모듈을 추가한 Spring Boot 애플리케이션을 준비하고, MMMQConfiguration에 Dispatcher 빈을 등록합니다.
repositories { maven { url "https://jitpack.io" } } dependencies { implementation "com.github.moko-meringue.mmmq:broker:0.0.1" }
server: port: 8080
@Configuration public class MMMQConfiguration { @Bean public Dispatcher helloDispatcher() { return new Dispatcher( "hello-dispatcher", new Host(WebProtocol.HTTP, "localhost", 8080), List.of(new TopicPattern("hello.*")) ); } }
Consumer 애플리케이션
broker에서 메시지를 받아 처리하는 클라이언트입니다.
consumer 모듈을 추가한 Spring Boot 애플리케이션을 준비하고, hello.mmmq 토픽을 구독하는 핸들러를 등록합니다.
repositories { maven { url "https://jitpack.io" } } dependencies { implementation "com.github.moko-meringue.mmmq:consumer:0.0.1" }
server: port: 8082
@Service public class HelloHandler { @MMMQListener("hello.mmmq") public void handleMessage(Object content) { System.out.println("Received: " + content); } }
Producer 애플리케이션
broker로 메시지를 보내는 클라이언트입니다.
producer 모듈을 추가한 Spring Boot 애플리케이션을 준비하고, Producer 빈을 등록합니다.
HelloController가 POST /messages로 받은 요청 본문을 hello.mmmq
토픽으로 발행합니다.
repositories { maven { url "https://jitpack.io" } } dependencies { implementation "com.github.moko-meringue.mmmq:producer:0.0.1" }
server: port: 8081
@Configuration public class MMMQConfiguration { @Bean Producer producer() { return Producer.builder(new Host(WebProtocol.HTTP, "localhost", 8080)) .build(); } }
@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); } }
실행
모든 애플리케이션을 실행한 다음, producer 애플리케이션의 /messages 엔드포인트로 POST 요청을 보냅니다.
요청 본문이 메시지로 발행되고, 구독 중인 consumer가 그 메시지를 받아 콘솔에 출력합니다.
$ curl -X POST http://localhost:8081/messages \
-H "Content-Type: application/json" \
-d '"Hello, mmmq!"'
Received: Hello, mmmq!
더 복잡한 시스템 구축하기
자세한 기능은 문서에서 확인할 수 있습니다.
재시도 정책, 패턴 기반 구독, 영속화 등, mmmq가 제공하는 다양한 기능으로 더 복잡한 메시징 시스템을 구축해보세요.