[RabbitMQ] Request / Reply with Spring Boot

2021. 11. 3. 11:49 Spring Cloud/RabbitMQ

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

1. Request/Reply

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

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

 

 

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

 

 

만약 위처럼 메시지를 또다른 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/

출처 : https://minholee93.tistory.com/entry/RabbitMQ-Request-Reply-with-Spring-Boot