[RabbitMQ] Spring boot 기본 사용법

2021. 11. 1. 17:58 Spring Cloud/RabbitMQ

이번 글에서는 Spring boot에서 RabbitMQ를 사용하는 기본적인 방법에 대해 알아보겠습니다.

0. RabbitMQ 설치하기

먼저 아래 링크를 참고해 각자의 서버에 RabbitMQ 서버와 RabbitMQ-Management를 설치합니다. 저는 AWS EC2 서버에 Docker를 사용해 RabbitMQ를 설치했습니다.

✔ EC2에 Docker 설치법
https://hackernoon.com/running-docker-on-aws-ec2-83a14b780c56

✔ RabbitMQ Docker 설치법
https://psychoria.tistory.com/541

RabbitMQ Instance 작명규칙은 아래와 같습니다.

✔ Naming Rule

• lowercase
• Exchange  : "x.[name]"
• Queue : "q.[name].[sub-name]"

RabbitMQ 서버를 설치하고난 뒤에는, https://start.spring.io/ 에서 Spring-boot Gradle 프로젝트를 다운받습니다. 다운받을 때 RabbitMQ 라이브러리를 선택해 Import 합니다.

메시지 생산자와 소비자 두개의 어플리케이션이 필요함으로 두개의 프로젝트를 생성합니다. (rabbitmq-producer / rabbitmq-consumer)

 

 

1. application.yml 수정하기

application.yml 파일에 위에서 설치한 RabbitMQ 서버의 config를 작성합니다.

 

 

각자 생성한 RabbtiMQ 서버의 정보를 입력하면 됩니다. Producer와 Consumer 둘다 입력해야 합니다.

spring:
  rabbitmq:
    host: [HOST]
    port: [PORT]
    username : [USERNAME]
    password : [PASSWORD]

2. Producer 생성하기

먼저 메세지를 생산하는 Producer를 생성합니다.

 

 

RabbitmqProducer

@Service
public class RabbitmqProducer {

    @Autowired
    private RabbitTemplate rabbitTemplate;

    public void sendHello(String name){

        rabbitTemplate.convertAndSend("q.minho", "Hello" + name);

    }
}

RabbitmqProducerApplication

 

@SpringBootApplication
public class RabbitmqProducerApplication implements CommandLineRunner {


    @Autowired
    private RabbitmqProducer rabbitmqProducer;

    public static void main(String[] args) {
        SpringApplication.run(RabbitmqProducerApplication.class, args);
    }

    @Override
    public void run(String... args) {

        rabbitmqProducer.sendHello("minho");
    }
}

앞서 생성한 Producer를 사용합니다. 어플리케이션은 CommandLineRunner를 implements하고 run 메서드를 Override 하면 됩니다.

RabbitmqProducerApplication을 실행하면 아래와 같이 "q.minho" Queue에 메세지가 생성되어 있습니다.

 

 

3. Consumer 생성하기

Producer가 생성한 메세지를 소비하는 Consumer를 생성합니다.

 

 

RabbitmqConsumer

@Service
public class RabbitmqConsumer {

    @RabbitListener(queues = "q.minho")
    public void listen(String message){

        System.out.println("Consuming : " + message);

    }
}

Spring Boot의 @RabbitListener 를 사용해 손쉽게 메세지를 Consume 할 수 있습니다. queues에는 target Queue를 입력합니다.

RabbitmqConsumerApplication

@SpringBootApplication
public class RabbitmqConsumerApplication {

    public static void main(String[] args) {

        SpringApplication.run(RabbitmqConsumerApplication.class, args);

    }

}

아무것도 입력하지 않아도 됩니다. 앞서 생성한 RabbitmqConsumer가 @Service로 등록되어있기 때문에, @RabbitListener에 등록한 Queue에 메세지가 생성될 때 마다 Real-time으로 메세지를 소비합니다.

RabbitmqConsumerApplication을 실행하면 아래와 같이 정상적으로 RabbitmqConsumer의 listen 메서드가 실행되었습니다.


참고 자료 : https://www.udemy.com/course/rabbitmq-java-spring-boot-for-system-integration/

 

출처 : https://minholee93.tistory.com/entry/RabbitMQ-Spring-boot-%EA%B8%B0%EB%B3%B8-%EC%82%AC%EC%9A%A9%EB%B2%95