rabbitmq: 29개의 글
이번 글에서는 RabbitMQ에서 사용하는 JSON Message Format을 Customize 해보도록 하겠습니다. 1. Customize JSON Format 앞선 글에선 Jackson의 ObjectMapper를 사용해 Employee Entity를 JSON String 형식으로 변경할 수 있었습니다. Employee @Getter @Setter @AllArgsConstructor @NoArgsConstructor public class Employee { private String employeeId; private String name; private LocalDate birthDate; } 기본적으로 Jackson은 Default로 구현되어있는 serialize() 메서드를 참고해 아래와 같이..
이번 글에서는 RabbitMQ에서 사용하는 메세지 포맷인 JSON에 대해 알아보도록 하겠습니다. 0. 왜 JSON을 사용하는가? RabbitMQ는 메세지 Format으로 어떠한 String 형식도 허용합니다. 하지만 이러한 자유도 때문에 오히려 Publisher와 Consumer 사이에 불필요한 자원을 낭비하게 됩니다. 만약 특정 Publihser가 본인만 사용하는 Format으로 Message를 발행할 경우, Consumer는 해당 Message Format을 해석해 사용하기 위한 비용을 소모해야 합니다. 따라서 이러한 낭비를 막고, 비즈니스 로직에 더욱 집중하기 위해 가장 보편적이로 널리 쓰이는 JSON Format으로 메시지 규격을 통일하는 것 입니다. JSON은 대부분의 언어에서 Create 및 ..
이번 글에서는 Spring boot의 Scheduling 기능을 사용해보도록 하겠습니다. 1. Fixed Rate 주기적로 메세지를 생성하기 위해선 Fixed Rate를 사용합니다. 1-1) Producer @Service public class RabbitmqProducer { @Autowired private RabbitTemplate rabbitTemplate; private Logger log = LoggerFactory.getLogger(RabbitmqProducer.class) ; private int i = 0; @Scheduled(fixedRate = 1000) public void sendMessage(){ i++; rabbitTemplate.convertAndSend("q.minho",..
이번 글에서는 Spring boot에서 RabbitMQ를 사용하는 기본적인 방법에 대해 알아보겠습니다. 0. RabbitMQ 설치하기 먼저 아래 링크를 참고해 각자의 서버에 RabbitMQ 서버와 RabbitMQ-Management를 설치합니다. 저는 AWS EC2 서버에 Docker를 사용해 RabbitMQ를 설치했습니다. ✔ EC2에 Docker 설치법 https://hackernoon.com/running-docker-on-aws-ec2-83a14b780c56 ✔ RabbitMQ Docker 설치법 https://psychoria.tistory.com/541 RabbitMQ Instance 작명규칙은 아래와 같습니다. ✔ Naming Rule • lowercase • Exchange : "x.[na..
이번 글에서는 RabbitMQ, Kafka 같은 메세지 시스템을 사용하는 이유에 대해 알아보겠습니다. 0. Message System이란? Application간 메세지를 주고받는 Communication Mechanism을 의미합니다. 주로 사용되는 메세징 시스템에는 RabbitMQ와 Kafka 등이 있습니다. 1. Message System이 없다면? 대규모 Enterprise 환경에서 만약 메시지 시스템을 사용하지 않고 구현한다면 아래와 같은 문제점이 발생하게됩니다. ✔ Real-Time 어플리케이션 구현이 어렵습니다. 만약 아래와 같이 3개의 독립된 어플리케이션(HR, Marketing, Directory) 이 존재할 때, 메시지 시스템이 없다면 각 시스템의 정보를 가져오기위해선 특정 시간별 Pu..
이번 글에서는 하나의 이상의 Consumer를 등록해 Queue에 발행된 메세지를 소비해보도록 하겠습니다. 1. 언제 Multiple Consumer를 사용하는가? Multiple Consumer는 Producer의 메시지 발행속도가 Subscriber의 Consume 속도보다 빠를 때 빠른 메세지의 처리를 위해 사용합니다. 예를 들어 아래 그림과 같이 Producer는 0.5s 마다 메세지를 발행하고, Consumer는 1.5s마다 하나씩 메시지를 처리한다면 시간이 지날 수록 Queue에는 처리되지 못한 메세지가 점점 쌓이게 됩니다. 따라서 1개 이상의 Consumer를 사용해 메세지를 보다 빠른속도로 처리함으로써 이와 같은 문제점을 개선할 수 있습니다. 쌓여있는 숙제를 여러명이서 나눠 빨리빨리 처리한..
이번 글에서는 RabbitMQ의 Prefetch에 대해 알아보겠습니다. 1. Prefetch란? Queue의 메세지를 Consumer의 메모리에 쌓아놓을 수 있는 최대 메세지의 양 입니다. 예를 들어 Prefetch가 250일 경우, RabbitMQ는 250개의 메세지까지 한번에 Listener의 메모리에 Push합니다. 그뒤 Consumer는 메모리에서 하나씩 메세지를 꺼내서 처리하게 됩니다. 이러한 Prefetch 값은 각 어플리케이션 환경에 맞도록 조정할 필요가 있습니다. 예를 들어 아래의 그림에서 총 500개의 메세지가 발행됬다고 가정해보겠습니다. 이후 Prefetch가 250인 Consumer1과 Consumer2가 각각 250개씩 본인들의 메모리에 메시지를 가져갑니다. 그뒤 각각의 Consum..
오늘 포스팅할 내용은 래빗엠큐이다. 그 동안에는 카프카를 사용할 일이 많아 카프카에 대한 포스팅이 주였는데, 이번에 래빗엠큐를 사용할 일이 생겨 간단히 래빗엠큐에 대해 간단히 다루어 볼것이다.(예제 코드는 위 깃헙에 올려놓았습니다.) 비동기 작업에 있어 큐를 사용하려면 중간에 메시지 브로커라는 개념이 존재하는데, 이러한 메시지 브로커에는 RabbitMQ, Kafka 등이 대표적으로 있다. 해당 포스트에서는 표준 MQ프로토콜인 AMQP를 구현한 RabbitMQ(래빗엠큐)에 대해 다루어볼 것이다. 간단하게 메시지큐는 아래 그림과 같은 워크 플로우로 이루어져있다. 대부분의 메시지큐는 프로듀서가 있고, 해당 프로듀서가 브로커로 메시지를 발행하면, 적절한 컨슈머가 해당 메시지를 구독(읽다)하는 구조이다. 그렇다면..
Spring - Rabbitmq를 이용한 비동기 메시징 서비스 -리액티브 마이크로서비스 Mac OS 환경에서 작성되었습니다. 오늘은 간단히 Spring boot + Rabbitmq를 이용한 비동기 메시징 서비스를 구현해볼 것이다. 일단 이 포스팅을 진행하는 이유는 요즘 시대에는 일체형 애플리케이션이 작은 서비스 단위인 마이크로서비스 단위로 나누어 서비스 단위로 배포하는 아키텍쳐가 대세인듯하다. 이 말은 즉슨, 아주 큰 애플리케이션이 작은 서비스 단위(마이크로서비스)로 나뉘어 각각 단독적으로 독립적으로 실행가능한 상태로 배포가 된다. 이런 경우 마이크로서비스끼리의 통신은 RESTful한 통신도 있지만 메시지 큐와 같은 서비스를 이용하여 비동기적으로 통신하기도 한다. 그리고 이 구조를 발행구독구조라고 한다...