yoncho`s blog

[RabbitMQ] 0. RabbitMQ ? 본문

기술, 나의 공부를 공유합니다./MQTT

[RabbitMQ] 0. RabbitMQ ?

욘초 2023. 6. 22. 23:57

RabbitMQ란 Erlang으로 구현된 오픈 소스 메시지 브로커 소프트웨어로 AMQP(Advanced Message Queueing Protocol) _ https://ko.wikipedia.org/wiki/AMQP 를 구현했으며 이후 MQTT, STOMP 등의 프로토콜 지원을 위해 확장
메시지를 생산하는 생산자(Producer)가 메시지를 큐에 저장해두면 소비자(Consumer)가 메시지를 가져가 처리하는 Pub/Sub 방식의 메시지 브로커이다.

지원하는 Protocol
- AMQP 0-9-1 (with extendsions)
- AMQP 1.0
- RabbitMQ Stream Protocl
- MQTT 3.11
- STOMP 1.0 ~ 1.2


특징.
- Message Durability
RabbitMQ 서버가 죽는 경우, 메모리에 저장되어있던 메시지들은 모두 소멸되는데 이를 방지하고자 RabbitMQ가 제공해주는 메시지 손실 방지 옵션으로
메시지를 메모리 저장될 때, 디스크에도 같이 저장하는 기능이다.
하지만 디스크에 저장할 때 서버가 죽는 경우, 메시지 손실을 막을 수 없다.
*설정 방법 :
Queue 생성 할 때 Durable 옵션을 true로 생성 및 Producer가 메시지를 전달할 때 PERSISTENT_NEXT_PLAIN 옵션을 줘야 해당 메시지를 디스크에 저장함.


- Prefetch Count
하나의 Queue에 여러 Consumer가 연결된 경우, 기본적으로 라운드 로빈으로 소비자에게 메시지를 전달한다.
문제점은 홀수번째 메시지는 소비자에게 처리 시간이 짧게 걸리고 짝수번째는 처리 시간이 긴 메시지들이 큐에 쌓이면 하나의 Consumer가 계속 처리 수행을 하게 되는 현상이 나옴.
위 현상을 방지하고자 Prefatch Count 옵션을 1로 설정해 Consumer가 Ack를 보내기 전 다른 메시지를 받지 않도록 작업 분배 가능함.


- 수평적 확장
하나의 Queue에 여러 Consumer가 연결된 경우, Queue에 있는 메시지는 라운드 로빈으로 메시지를 하나하나 다른 Consumer에게 전달함으로 메시지 중복 처리를 막을 수 있음.
위와 같이 Consumer를 수평적 확장이 가능하고 Producer 또한 확장이 가능함.

- 메시지 손실 최소화 방법
RabbitMQ는 메시지 손실을 최소화 하기 위한 여러 매커니즘 제공
1. Clustering
2. Message Durability
3. Queue Mirroring
4. Master and Slave

 

공식 홈페이지 : https://www.rabbitmq.com/
GIT 저장소 : https://github.com/rabbitmq

 

참조 :
https://yoonbing9.tistory.com/129
https://velog.io/@sdb016/RabbitMQ-%EA%B8%B0%EC%B4%88-%EA%B0%9C%EB%85%90
https://m.blog.naver.com/PostView.naver?blogId=tmondev&logNo=221051503100&navType=by

 

'기술, 나의 공부를 공유합니다. > MQTT' 카테고리의 다른 글

[RabbitMQ] 2. Queue  (0) 2023.06.24
[RabbitMQ] 1. Exchange  (0) 2023.06.24
[Mosquitto] 3. Subscriber  (0) 2023.06.22
[Mosquitto] 2. Publisher  (0) 2023.06.22
[Mosquitto] 1. Broker  (0) 2023.06.22
Comments