RabbitMQ

RabbitMQ 큐,바인딩,exchange 생성 자동화

초록색거북이 2023. 10. 26. 13:53
728x90
반응형
SMALL

https://yjkim-dev.tistory.com/88

 

Springboot + RabbitMQ 연동해서 간단하게 사용해보기

먼저 RabbitMQ 를 깔아볼게요. 내 Mac에 설치해도 되지만, 저는 그게 싫어서 docker로 RabbitMQ를 관리해볼게요. 1.Mac에서 설치할 경우 brew update brew install rabbitmq Homebrew를 이용하여 간단하게 설치가 가능

yjkim-dev.tistory.com

전 시간에 Springboot + RabbitMQ 를 연동하여 간단하게 RabbitMQ의 사용하는 법에 대해 배웠다.

 

RabbitMQ 에서 제공하는 WebUI 에서 우리는 직접 큐를 생성하고, Exchange를 만들고 그랬다. (UI안에서)

 

이제는 WebUI에서 직접 클릭해서 만드는 것이 아닌, 코드를 통해 설정을 해보겠다.

 

간단하다.

 

@Configuration
public class RabbitMQConfig {
    @Bean
    public Jackson2JsonMessageConverter messageConverter()  {
        return new Jackson2JsonMessageConverter();
    }
    @Bean
    public FanoutExchange createFanoutExchange() {
        return new FanoutExchange("x.another-dummy",true,false,null);
    }
    @Bean
    public Queue createQueue() {
        return new Queue("q.another-dummy");
    }

    @Bean
    public Binding createBinding() {
        return BindingBuilder.bind(createQueue()).to(createFanoutExchange());
    }
}

 

이게 전부다.

 

하나씩 분석해보자.

 

첫번째.

@Bean
public Jackson2JsonMessageConverter messageConverter()  {
    return new Jackson2JsonMessageConverter();
}

우선 Jackson2JsonMesaageConverter 는 무엇일까?

 

예를들어 우리가 이메일 전송기능을 만든다고 했을때, 메세지큐를 탑재한다면 우리는 이메일을 우선 메세지큐에 보내야한다.

 

메세지큐에 보낼때 무조건 Json 형식이여야 한다.

 

그래서 Object. ->. Json 으로 컨버팅 해준다고 보면 됀다.

 

그 역할이 전부다.

 

 

두번째.

@Bean
public FanoutExchange createFanoutExchange() {
    return new FanoutExchange("x.another-dummy",true,false,null);
}

FanoutExchange 는 무엇일까?

 

일단 이 메소드는 Exchange를 만들어주는 메소드이다.

 

근데 앞에 Fanout 이 붙는데, 이건 큐에 분배해줄 방식을 정해준것이다. 다시말하면 큐 분배 알고리즘이다.

 

분배 알고리즘은 4가지가 있다.

 

 - fanout : binding된 모든 큐에 동일한 메세지 전달 
 - direct : 라우팅 키(조건)에 정확하게 일치하는 큐에 메세지 전달 
 - headers : 헤더에 속해있는 key : value 값에 따라 일치하는 큐에 메세지 전송 
 - topic : direct와 유사하지만, '*','#'  과 같은 라우팅 키 패턴으로 전달하여 조건에 맞는 큐에만 메세지 전송

 

Exchange 단어 앞에 저 알고리즘이름을 붙여주면 그대로 객체생성이 된다.

 

세번째.

@Bean
public Queue createQueue() {
    return new Queue("q.another-dummy");
}

얘는 말그대로 큐를 생성하는 메소드이다.

큐이름을 적어야 한다.

 

네번째.

    @Bean
    public Binding createBinding() {
        return BindingBuilder.bind(createQueue()).to(createFanoutExchange());
    }

바인딩 해주는 메소드이다.

위에 만든 큐 와 exchange를 바인딩 해준다.

 

 

 

결과

큐가 생성된걸 볼수있다.

Exchange가 생성된걸 볼수있다.

exchange 와 큐가 binding 된것도 알수 있다.

 

끝.

728x90
반응형
LIST