[RabbitMQ] Request / Reply with Spring Boot

반응형

이번 글에서는 Spring Boot를 사용한 Message Reqeust/Reply에 대해 알아보도록 하겠습니다.

1. Request/Reply

Request는 message 처리 요청을 의미합니다. Reply는 메세지 처리후의 응답이라고 생각할 수 있습니다.

기본적으로 Consumer는 RabbitMQ로 부터 메세지 처리 요청(Request)이 오면 적절한 프로세스를 통해 메세지를 처리하는 과정을 거치게 됩니다. 처리과정을 거친뒤에는 해당 Consumer에서 아래 그림처럼 다른 서비스의 API를 호출해 또다른 프로세스를 진행할 수 있습니다.

image.png

아니면 아래 그림처럼 또다른 메세지를 생성해 적절한 Exchnage로 메세지를 전달 할 수 있습니다.

image.png

만약 위처럼 메시지를 또다른 exchnage에 전달하려고하면 rabbittemplate을 사용해 메시지를 publish하는 방법을 생각할 수 있습니다. 하지만, 이러한 request/reply 과정은 반복적이며 일반적인 과정이기 때문에 Spring 자체적으로 간단하게 구현할 수 있는 방법을 제공하고 있습니다.

구현방법은 아래와 같습니다.

@RabbitHandler
@SendTo("exchange/routingkey")
public ReturnMessageType handleInvoiceCreated(InvoiceCreatedMessage message){
    log.info("invoice created : {} ", message);
    return new ReturnMessageType();
}

소스를 해석해보면 메세지 Request를 처리하는 메서드위에 @SendTo 어노테이션을 통해 Reply할 exchange와 routingkey를 명시해줍니다. 또한 기존의 void Type이였던 return 타입을 새롭게 전달할 메시지의 타입으로 변경합니다. 마지막으로 메서드의 return 값으로 전달할 메시지 object를 사용하면 되겠습니다.


참고 자료 : https://www.udemy.com/course/rabbitmq-java-spring-boot-for-system-integration/


추천서적

 

RabbitMQ 따라잡기:AMQP 기반의 오픈소스 메시지 브로커

COUPANG

www.coupang.com

파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음


반응형

댓글

Designed by JB FACTORY