web/마이크로서비스

스프링 부트와 RabbitMQ를 사용한 리액티브 마이크로 서비스

위들 wedul 2018. 10. 4. 23:44
반응형

publisher와 subscriber가 외부의 메시지 큐(RabbitMQ)와 연결되어 있는 애플리케이션을 만들어보자.


Rabbitmq
 설치

- 자세한 설치법은 검색을 해서 찾아보면 간단하게 나온다.
- 하단의 내용은 local docker가 설치되어 있을때 docker-compose.yml을 작성할때 붙혀넣으면 된다.

rabbitmq:
  image: rabbitmq:management 
  ports:
    - "5672:5672” // 연결 포트 
    - "15672:15672” // 관리자 페이지 포트 (localhost:15672) 


Maven

의존성 추가

1
2
3
4
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
cs


Sender 클래스

Queue를 생성 해당 생성자의 파라미터는 Queue의 이름과 duration으로 구성된다. durable의 값이 true이면 서버가 재시작 되어도 큐에 내용이 살아있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@Component
public class Sender {
 
    @Autowired
    RabbitMessagingTemplate template;
 
    @Bean
    Queue queue() {
        // 뒤에 durable의 경우에는 true이면 서버가 재시작 되어도 큐가 살아있다. (이름과 지속성여부 부여)
        return new Queue("TestQ"false);
    }
 
    public void send(String message) {
        template.convertAndSend("TestQ", message);
    }
 
}
cs


Receiver 클래스

RabbitListener을 통해 메시지를 받을 수 있다.

1
2
3
4
5
6
7
8
9
public class Receiver {
 
    // RabbitListener만 추가하면 메시지를 받을 수 있다.
    @RabbitListener(queues = "TestQ")
    public void processMessage(String content) {
        System.out.println(content);
    }
 
}
cs


Spring Application 설정

CommandLineRunner 인터페이스를 구현할 경우 Override하는 run메서드는 어플리케이션이 올라갈때 실행된다. 이때 Sender 객체에 send 메서드를 호출시켜 Queue에 메시지를 전송하다. 

정상적으로 전송이 완료되면 console창에 test 00!! 이라는 문구가 출력된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@SpringBootApplication
public class MicroserviceApplication implements CommandLineRunner {
 
    @Autowired
    Sender sender;
 
    public static void main(String[] args) {
        SpringApplication.run(MicroserviceApplication.class, args);
    }
 
    @Override
    public void run(String... args) throws Exception {
        sender.send("test 00!!!");
    }
}
cs


728x90
반응형