반응형

Spring Boot에서 RabbitMQ 를 연결을 해보자.

원래는 AWS에 있는 Ubuntu 서버에 설치를 한후 연결을 하려고 했다. 그런데 설치까지는 문제가 없이 잘 진행 됐는데 이상하게 SpringBoot에서 연결 하려고 하면 Connection Refuse가 계속 나와 몇일을 보냈다. port를 안연것도 아니고, management 콘솔은 15672포트로 잘만 접속 되는데 5672포트로 연결 하려고만 하면 안됐다. 오늘까지 하다가 안되면 GG 치려고 했다. 실제로 GG 치고 로컬에 깔고 진행을 했다.

그래서 정상 작동하는거 보고 혹시나 해서 다시 AWS에 있는 Rabbit MQ에 접속을 시도해 봤는데 됐다... 왜 되는거지???? --_--;;


대체 이것때문에 쌩쑈를 몇일을 했는데. 어쨌든 되니깐 좋다. 하아..


Rabbitmq 설치 방법은 홈페이지를 찾아보거나 MAC일 경우 내가 작성한 포스트를 보면 된다.


2017/10/27 - [Development/DataBase] - [RabbitMQ] MacOS에 RabbitMQ 설치


application.properties 파일에 접속 정보를 추가해준다.

1
2
3
4
5
myqueue=spring-study
spring.rabbitmq.host=localhost
spring.rabbitmq.username=rabbitmq
spring.rabbitmq.password=rabbitmq1!
spring.rabbitmq.port=5672

cs


Consumer.java

1
2
3
4
5
6
7
8
9
@Component
public class Consumer {
    private static final Logger logger = LoggerFactory.getLogger(Consumer.class);
 
    @RabbitListener(queues = "${myqueue}")
    public void handler(String message){
        logger.info("consumer....> " + message);
    }
}


cs


Consumer는 RabbitListener에 정의 되어있는 Queue를 감시하다가 메시지가 들어오면 handler로 전해준다.


Producer.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@Component
public class Producer {
    private static final Logger logger = LoggerFactory.getLogger(Producer.class);
 
    @Autowired
    private RabbitTemplate rabbitTemplate;
 
    public void sendTo(String routingKey, String message){
        logger.info("send message....");
 
        this.rabbitTemplate.convertAndSend(routingKey, message);
    }
 
}

cs


Producer에서는 routingKey 와 message 를 받는다. routingKey 가  Queue 이름이 된다. 메세지는 Exchange로 전송되며 Exchange는 Queue로 실어나른다.



StudyApplication.java


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
@Value("${myqueue}")
String queue;
 
@Bean
Queue queue(){
    return new Queue(queue, false);
}
 
@Autowired
Producer producer;
 
@Bean
CommandLineRunner sender(Producer producer){
       return args -> {
           producer.sendTo(queue, "Hello !!!");
    };
}
 
@Scheduled(fixedDelay = 500L)
public void sendScheduleMessage(){
    producer.sendTo(queue, "Message Delevery : " + new Date());
}
cs


RabbitMQ Management 에 들어가서 Connection, Channel, Queue를 확인 하면 아래처럼 나온다.





이거 하나 테스트 해보려고 대체 몇일을 날린줄 모르겠다. 여기에서는 간단히 설명했지만 RabbitMQ 도 Queue와 Exchange에 대한 내용들에 대한 정의를 알아야할 부분이 많다. 시간내서 한번 개념을 확실히 잡고 가야겠다.


소스 : https://github.com/blusky10/study_spring


(예제 내용은 "실전스프링워크북" 에 있는 내용을 실습한 내용입니다.) 


728x90
반응형

+ Recent posts