본문 바로가기

개발/BACK

Spring Boot 환경에서 RabbitMQ 적용하기

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