RabbitMQ는 강력하고 유연한 메시지 브로커로, 다양한 시스템 간의 비동기 통신을 가능하게 합니다. 이번 포스팅에서는 Spring Boot 애플리케이션에서 RabbitMQ를 설정하고 사용하는 방법을 단계별로 설명하겠습니다.
1. 프로젝트 생성 및 설정
먼저, Spring Initializr를 사용하여 새로운 Spring Boot 프로젝트를 생성합니다. 필요한 의존성으로는 Spring for RabbitMQ와 Spring Web을 추가합니다.
- Spring Initializr: https://start.spring.io
- Dependencies: Spring Web, Spring for RabbitMQ
생성된 프로젝트의 pom.xml 또는 build.gradle 파일에 RabbitMQ 관련 의존성이 추가된 것을 확인할 수 있습니다.
<!-- pom.xml -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
2. RabbitMQ 설정
application.properties 파일에 RabbitMQ 관련 설정을 추가합니다. RabbitMQ 서버의 호스트, 포트, 사용자명, 비밀번호를 설정합니다.
# application.properties
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
3. 구성 클래스 작성
RabbitMQ를 사용하기 위한 구성 클래스를 작성합니다. 이 클래스에서 큐, 익스체인지, 바인딩 등을 설정합니다.
// RabbitMQConfig.java
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.TopicExchange;
import org.springframework.amqp.rabbit.annotation.EnableRabbit;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.listener.adapter.MessageListenerAdapter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@EnableRabbit
public class RabbitMQConfig {
static final String topicExchangeName = "spring-boot-exchange";
static final String queueName = "spring-boot";
@Bean
Queue queue() {
return new Queue(queueName, false);
}
@Bean
TopicExchange exchange() {
return new TopicExchange(topicExchangeName);
}
@Bean
SimpleMessageListenerContainer container(ConnectionFactory connectionFactory,
MessageListenerAdapter listenerAdapter) {
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
container.setQueueNames(queueName);
container.setMessageListener(listenerAdapter);
return container;
}
@Bean
MessageListenerAdapter listenerAdapter(Receiver receiver) {
return new MessageListenerAdapter(receiver, "receiveMessage");
}
}
4. 메시지 리스너 작성
메시지를 수신하는 리스너 클래스를 작성합니다. 이 클래스는 RabbitMQ로부터 메시지를 수신하여 처리합니다.
// Receiver.java
import org.springframework.stereotype.Component;
@Component
public class Receiver {
public void receiveMessage(String message) {
System.out.println("Received <" + message + ">");
}
}
5. 메시지 발행
메시지를 RabbitMQ로 발행하는 서비스 클래스를 작성합니다.
// Sender.java
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class Sender {
@Autowired
private RabbitTemplate rabbitTemplate;
public void send(String message) {
rabbitTemplate.convertAndSend(RabbitMQConfig.topicExchangeName, "foo.bar.baz", message);
System.out.println("Sent <" + message + ">");
}
}
6. 컨트롤러 작성
테스트를 위해 메시지를 발행하는 엔드포인트를 제공하는 컨트롤러를 작성합니다.
// MessageController.java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class MessageController {
@Autowired
private Sender sender;
@GetMapping("/send")
public String sendMessage(@RequestParam String message) {
sender.send(message);
return "Message sent: " + message;
}
}
7. 애플리케이션 실행 및 테스트
애플리케이션을 실행하고, 브라우저나 Postman을 사용하여 메시지를 발행하는 엔드포인트에 접근합니다.
http://localhost:8080/send?message=HelloRabbitMQ
콘솔에 다음과 같은 출력이 나타나는지 확인합니다.
Sent <HelloRabbitMQ>
Received <HelloRabbitMQ>
결론
이 포스팅에서는 Spring Boot 애플리케이션에서 RabbitMQ를 설정하고 사용하는 기본적인 방법을 설명했습니다. RabbitMQ를 사용하면 다양한 시스템 간의 메시지 기반 통신을 쉽게 구현할 수 있습니다. 이를 통해 비동기 처리, 작업 큐, 이벤트 드리븐 아키텍처 등을 효과적으로 구현할 수 있습니다. RabbitMQ와 Spring Boot를 결합하여 더욱 유연하고 확장 가능한 애플리케이션을 개발해 보세요!
'개발 > BACK' 카테고리의 다른 글
NoSQL 데이터베이스 정의 및 예제 (0) | 2024.07.10 |
---|---|
Spring Boot에서 Firebase Messaging 구현하기 (0) | 2024.07.10 |
Exploring the Latest JDK Version: Advantages and Issues : JDK20 (0) | 2024.07.08 |
Mastering Transaction Exception Handling in Spring Boot: A Comprehensive Guide (0) | 2024.07.08 |
Setting Up Java Socket Communication in a Spring Boot Application (0) | 2024.07.08 |