[RabbitMQ] Multiple Consumer 사용하기

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

이번 글에서는 하나의 이상의 Consumer를 등록해 Queue에 발행된 메세지를 소비해보도록 하겠습니다.

1. 언제 Multiple Consumer를 사용하는가?

Multiple Consumer는 Producer의 메시지 발행속도가 Subscriber의 Consume 속도보다 빠를 때 빠른 메세지의 처리를 위해 사용합니다.

예를 들어 아래 그림과 같이 Producer는 0.5s 마다 메세지를 발행하고, Consumer는 1.5s마다 하나씩 메시지를 처리한다면 시간이 지날 수록 Queue에는 처리되지 못한 메세지가 점점 쌓이게 됩니다.

따라서 1개 이상의 Consumer를 사용해 메세지를 보다 빠른속도로 처리함으로써 이와 같은 문제점을 개선할 수 있습니다. 쌓여있는 숙제를 여러명이서 나눠 빨리빨리 처리한다고 생각하면 되겠습니다.

 

 

1. Multiple Consumer 사용하기

Spring Boot에서 Mulitple Consumer는 아래와 같이 간단하게 사용할 수 있습니다.

@Service
public class RabbitmqConsumer {

    private Logger log = LoggerFactory.getLogger(RabbitmqConsumer.class);

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

        log.info("consume message {} on {} ", message, Thread.currentThread().getName());

        try {
            Thread.sleep(ThreadLocalRandom.current().nextLong(2000));
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

Multiple Consumer를 사용하기 위해선 위와 같이 @RabbitListener 어노테이션에 concurrency 변수만 추가해주면 됩니다. 저는 3을 입력해 총 3개의 Consumer가 동일 Queue에 쌓여 있는 메세지를 소비하도록 하겠습니다.

RabbitmqConsumer Application을 실행하면, 아래와 같이 3개의 Rabbitmq Consumer가 메세지를 처리하는 것을 확인할 수 있습니다.

RabbitMQ Managment 콘솔의 Channel을 확인해보면 3개의 Consumer가 연결된 Channel 목록을 확인할 수 있습니다.


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

출처 : https://minholee93.tistory.com/entry/RabbitMQ-Multiple-Consumer-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0