반응형

spring boot 와 연동하면서 삽질을 많이했는데 일단 기록은 해놔야 할것 같아서 메모를 한다.

MacOs에서 RabbitMQ 를 설치하는것은 참~~ 간단하다.


https://www.rabbitmq.com/install-standalone-mac.html


Rabbitmq 홈페이지에 install 가이드를 보면 따라하기 쉽게 되어있다. 설치를 위해서는 brew를 설치 해야한다.


https://brew.sh/index_ko.html


brew 홈페이지에 가보면 설치 방법이 나와있다. 홈페이지에 나온대로


1
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
cs


이렇게 실행을 하면 brew가 설치가 된다. brew는 apt-get  같은 패키지 관리/설치를 해주는 툴이라고 이해하면 될것 같다.


그리고 나서


1
brew install rabbitmq
cs


이렇게 하면 설치는 완료된다.  설치 위치는 /usr/local/sbin 위치에 설치가 된다.

저 디렉토리로 이동후에 ./rabbitmq-server 를 실행하면 정상적으로 작동한다.



그리고 나서 http://localhost:15672/ 로 접속을 하면 된다. 처음 계정은 guest/guest 로 접속을 하면 된다.


guest 로만 접속을 하면 이상하니깐 계정을 하나 더 만들었다.


1
2
./rabbitmqctl add_user rabbitmq rabbitmq1!
./rabbitmqctl set_user_tags rabbitmq administrator
cs


첫번째 명령어는 새로운 계정을 생성하는 명령어이고 두번째 명령어는 생성한 계정에 permission을 할당하는 명령어 이다.

실제 화면에 들어가서 확인해 보면 아래와 같이 나온다.




728x90
반응형
반응형

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