개발/BACK

Spring Boot 환경에서 RabbitMQ 적용하기

Hdev&Shoes 2024. 7. 10. 22:01
728x90

 

 

 

 

RabbitMQ는 강력하고 유연한 메시지 브로커로, 다양한 시스템 간의 비동기 통신을 가능하게 합니다. 이번 포스팅에서는 Spring Boot 애플리케이션에서 RabbitMQ를 설정하고 사용하는 방법을 단계별로 설명하겠습니다.

1. 프로젝트 생성 및 설정

먼저, Spring Initializr를 사용하여 새로운 Spring Boot 프로젝트를 생성합니다. 필요한 의존성으로는 Spring for RabbitMQSpring Web을 추가합니다.

생성된 프로젝트의 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를 결합하여 더욱 유연하고 확장 가능한 애플리케이션을 개발해 보세요!

728x90