[RabbitMQ] Spring boot 기본 사용법

반응형

이번 글에서는 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)

image.png

1. application.yml 수정하기

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

image.png

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

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

2. Producer 생성하기

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

image.png

RabbitmqProducer

@Service
public class RabbitmqProducer {

    @Autowired
    private RabbitTemplate rabbitTemplate;

    public void sendHello(String name){

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

    }
}

Spring Boot의 RabbitTemplate을 사용하면 손쉽게 메세지를 Publish 할 수 있습니다. convertAndSend("queuename", "message") 혹은 convertAndSend("exchangename","routingkey", "message") 으로 메세지를 Publish 할 수 있습니다.

저는 미리 생성해둔 "q.minho" Queue에 메세지를 Publish 하겠습니다.

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에 메세지가 생성되어 있습니다.

image.png

3. Consumer 생성하기

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

image.png

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 메서드가 실행되었습니다.

image.png


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


추천서적

 

RabbitMQ 따라잡기:AMQP 기반의 오픈소스 메시지 브로커

COUPANG

www.coupang.com

파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음


반응형

댓글

Designed by JB FACTORY