안녕하세요 오늘은 RabbitMQ를 사용하여 큐에 데이터를 넣고 빼는 작업을 해보겠습니다.
RabbitMQ는 메시지 브로커(Message Broker)로서,
분산 시스템 간의 비동기적인 통신을 위해 사용됩니다.
1. 의존성 추가
먼저, 프로젝트의 의존성 관리 파일(예: pom.xml 또는 build.gradle)에
RabbitMQ 관련 의존성을 추가해야 합니다.
메이븐:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
그래들:
implementation 'org.springframework.boot:spring-boot-starter-amqp'
2. RabbitMQ 연결 설정
Spring Boot를 사용하는 경우,
application.properties 또는 application.yml 파일에 RabbitMQ 연결 설정을 추가합니다.
application.yml
spring:
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
3. 메시지 수신 설정
Spring에서 RabbitMQ로부터 메시지를 수신하려면
@RabbitListener 어노테이션을 사용하여 메소드를 구성해야 합니다.
이 어노테이션은 RabbitMQ 큐(Queue)에서 메시지를 받을 수 있는 리스너 역할을 합니다.
@Component
public class MessageReceiver {
@RabbitListener(queues = "myQueue")
public void receiveMessage(String message) {
// 수신된 메시지 처리 로직
System.out.println("Received message: " + message);
}
}
위 예시에서는 MessageReceiver 클래스에 @Component 어노테이션을 추가하여
Spring의 컴포넌트 스캔 대상으로 만듭니다.
그리고 receiveMessage() 메소드에 @RabbitListener 어노테이션을 적용하여
"myQueue"라는 RabbitMQ 큐에서 메시지를 받습니다.
이 때, 매개변수로 전달되는 문자열은 수신된 메시지입니다.
4. 데이터 송신
이번에는 큐에 메시지를 넣어 봅시다.
데이터를 송신하기 위해서는 RabbitTemplate 클래스를 사용합니다.
RabbitTemplate은 RabbitMQ와의 상호작용을 단순화한 API입니다.
@Service
public class MessageSender {
private final RabbitTemplate rabbitTemplate;
public MessageSender(RabbitTemplate rabbitTemplate) {
this.rabbitTemplate = rabbitTemplate;
}
public void sendMessage(String message) {
rabbitTemplate.convertAndSend("myExchange", "myRoutingKey", message);
}
}
위 예시에서는 MessageSender 클래스에 RabbitTemplate을 주입받아서 사용합니다.
sendMessage() 메소드에서는 rabbitTemplate.convertAndSend() 메소드를 사용하여
"myExchange"와 "myRoutingKey"를 통해 메시지를 RabbitMQ로 송신합니다.
5. 실행 및 결과 확인
위의 설정과 코드가 준비되었다면,
애플리케이션을 실행하고 RabbitMQ로부터 수신된 데이터를 확인할 수 있습니다.
메시지 수신은 애플리케이션 실행 시 자동으로 시작되며,
RabbitMQ 큐에 도착한 메시지가 있으면 해당 리스너가 작동하여 메시지를 처리합니다.
또한 rabbitmq는 모니터링도 지원하여 localhost:15672 로 들어가시면 큐 상태를 확인할 수 있는
모니터링 페이지도 쓸 수 있습니다.
이러한 방식으로 Spring과 RabbitMQ를 조합하여 비동기적인 통신을 구현할 수 있으며,
분산 시스템 간의 데이터 교환에 유용합니다.
참고 자료:
감사합니다.
'스프링부트' 카테고리의 다른 글
Swagger로 API 문서 자동화: 실습 후기와 튜토리얼 (0) | 2023.11.28 |
---|---|
Spring에서 카프카(Kafka)를 사용하여 데이터를 받아보자 (0) | 2023.10.14 |
Spring WebFlux의 WebClient를 사용하여 비동기, 논블로킹 방식으로 HTTP 요청을 보내보자 (0) | 2023.10.14 |
Java 스프링부트를 이용한 RESTful API 작성하기: JPA와 데이터베이스를 사용한 api 기본 예제 (0) | 2023.09.27 |
Spring WebFlux 알아보기 - Mono 예제 (0) | 2023.09.01 |
댓글