SlideShare a Scribd company logo
RabbitMQ의 주요 용어부터 알아보자!
X
Producer : 메시지 보내는 프로그램
Consumer : 메시지 받는 프로그램
Queue : 메시지를 저장하는 버퍼
Exchange : 메시지를 큐에 분배하는 교환소
Binding
: Exchange가 Queue에 메시지를 보내도록 맺어진 관계
• Consumer는 Queue에서 메시지를 받으면 Ack를 보내야 함
• Consumer가 Ack를 보내지 않고 죽거나 연결이 끊어지면
다른 Consumer에 메시지가 다시 배정됨
• Unacked 메시지가 많을수록 RabbitMQ가 메모리를 많이
사용함
• 프로그램에서 autoAck=true로 설정하면 메시지를 받자마
자 Ack를 보냄
(이 때, Consumer가 긴 작업 중 죽으면 메시지가 손실됨)
Message Acknowledgment
Message Durability
• RabbitMQ 서버가 종료되면 Queue와 메시지를 모두 잃게
됨
• Queue를 잃지 않으려면 Queue를 선언할 때 durable=true
로 설정
(이미 만들어진 동일한 이름의 Queue가 있으면 durable
값이 적용되지 않음)
• 메시지를 잃지 않으려면 Producer가 메시지를 젂송할 때
Persistent 메시지임을 표시
(MessageProperties.PERSISTENT_TEXT_PLAIN)
RabbitMQ 활용 시나리오를 알아보자!
공식 홈페이지 튜토리얼
1.“Hello World!”
2.Work queues
3.Publish / Subscribe
4.Routing
5.Topics
6.RPC
https://www.rabbitmq.com/getstarted.html
1. “Hello World”
Producer Consumer
Queue
(name=hello)
2. Work queues
Queue
(name=task_queue)
Producer
Consumer
• RabbitMQ는 Unacked 메시지 수를 확인하지 않고 Queue
에 들어온 n번째 메시지를 n번째 Consumer에 맹목적으
로 젂달하기 때문에 바쁜 Consumer와 한가한 Consumer
가 생길 수 있음
• 이 때, prefetchCount=1로 basicQos를 설정하여 ack를
받기 젂에 새로운 메시지를 보내지 않도록 할 수 있음
(autoAck=true로 설정하면 의미 없음)
Fair Dispatch
3. Publish / Subscribe
Producer
Queue1
Queue2Exchange
(type=fanout)
Broadcast!
Temporary Queue
• Queue 이름을 꼭 알아야 할 필요가 없을 때, 이름이
자동으로 정해지는 임시 Queue를 사용할 수 있음
• Non-Durable, Autodelete Queue
4. Routing
Routing Key가 일치하는 Queue에만 전송!
Routing Key를 동일하게 설정하여 브로드캐스팅처럼!
Exchange Type
• Fanout: 모든 Queue에 브로드캐스팅
• Direct: Routing Key가 일치하는 Queue에 젂달
• Topic: Routing Key의 패턴을 비교
• Headers: Routing Key 대신 Message Header 속성을 비교
5. Topic
Routing Key의 패턴에 따라 메시지를 보냄!
Routing Key 패턴
• 점(.)으로 구분된 여러 단어로 Routing Key를 만들 수
있음 (최대 255 바이트)
- stock.usd.nyse
- nyse.vmw
- quick.orange.rabbit
• 특수 기호
- * (star): 단 하나의 단어
- # (hash): 0개 이상의 단어
"<speed>.<colour>.<species>"
Q1 is interested in all the orange animals.
Q2 wants to hear everything about rabbits, and
everything about lazy animals.
quick.orange.rabbit -> Q1, Q2
lazy.orange.elephant -> Q1, Q2
quick.orange.fox -> Q1
lazy.brown.fox -> Q2
lazy.pink.rabbit -> Q2
quick.brown.fox -> X
orange -> X
quick.orange.male.rabbit -> X
lazy.orange.male.rabbit -> Q2
6. RPC
원격 컴퓨터에 있는 함수를 실행하고 결과를 기다릴
필요가 있을 때 (동기 처리)
• 응답을 받기 위한 요청 메시지를 보낼 때에는
Callback Queue 주소를 함께 보내야 함
• 요청 메시지를 보낼 때 고유한 값으로 Correlation
Id를 설정하여 Callback Queue를 통해 응답 받은 메
시지가 어느 요청에 대한 응답인지 확인할 수 있음
RPC 호출 파라미터
끝

More Related Content

What's hot (20)

PPTX
How to get http query parameters in mule
Ramakrishna kapa
 
PDF
엘라스틱서치, 로그스태시, 키바나
종민 김
 
PDF
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式
Shengyou Fan
 
PDF
Advanced Percona XtraDB Cluster in a nutshell... la suite
Kenny Gryp
 
PPTX
Java Foundations: Objects and Classes
Svetlin Nakov
 
PDF
[2015-06-26] Oracle 성능 최적화 및 품질 고도화 3
Seok-joon Yun
 
PDF
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
현철 조
 
PDF
Cached and Confused: Web Cache Deception in the Wild
Sajjad "JJ" Arshad
 
PDF
[오픈소스컨설팅] Ansible을 활용한 운영 자동화 교육
Ji-Woong Choi
 
PDF
PYTHON FULL TUTORIAL WITH PROGRAMMS
Aniruddha Paul
 
PDF
FIFA 온라인 3의 MongoDB 사용기
Jongwon Kim
 
PPTX
Introduction à Angular
Abdoulaye Dieng
 
PPTX
android sqlite
Deepa Rani
 
PDF
Node.js Tutorial for Beginners | Node.js Web Application Tutorial | Node.js T...
Edureka!
 
PDF
실전 서버 부하테스트 노하우
YoungSu Son
 
PPTX
Hibernate jpa
Lhouceine OUHAMZA
 
PDF
H3 2011 파이썬으로 클라우드 하고 싶어요_분산기술Lab_하용호
KTH, 케이티하이텔
 
PDF
Bulk Loading Data into Cassandra
DataStax
 
PDF
Cbs aws-fundamentals-2
Luis Merino Troncoso
 
PDF
Introduction aux SGBD
Christophe Vaudry
 
How to get http query parameters in mule
Ramakrishna kapa
 
엘라스틱서치, 로그스태시, 키바나
종민 김
 
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式
Shengyou Fan
 
Advanced Percona XtraDB Cluster in a nutshell... la suite
Kenny Gryp
 
Java Foundations: Objects and Classes
Svetlin Nakov
 
[2015-06-26] Oracle 성능 최적화 및 품질 고도화 3
Seok-joon Yun
 
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
현철 조
 
Cached and Confused: Web Cache Deception in the Wild
Sajjad "JJ" Arshad
 
[오픈소스컨설팅] Ansible을 활용한 운영 자동화 교육
Ji-Woong Choi
 
PYTHON FULL TUTORIAL WITH PROGRAMMS
Aniruddha Paul
 
FIFA 온라인 3의 MongoDB 사용기
Jongwon Kim
 
Introduction à Angular
Abdoulaye Dieng
 
android sqlite
Deepa Rani
 
Node.js Tutorial for Beginners | Node.js Web Application Tutorial | Node.js T...
Edureka!
 
실전 서버 부하테스트 노하우
YoungSu Son
 
Hibernate jpa
Lhouceine OUHAMZA
 
H3 2011 파이썬으로 클라우드 하고 싶어요_분산기술Lab_하용호
KTH, 케이티하이텔
 
Bulk Loading Data into Cassandra
DataStax
 
Cbs aws-fundamentals-2
Luis Merino Troncoso
 
Introduction aux SGBD
Christophe Vaudry
 

Similar to RabbitMQ 알아보기 (8)

PPTX
Warp
aceigy6322
 
PDF
Kafka 자료 v0.1
Hyosang Hong
 
PDF
Kafka 자료 v0.1
Hyosang Hong
 
PDF
[Td 2015]개발하기 바쁜데 푸시서버와 메시지큐는 있는거 쓸래요(김영재)
Sang Don Kim
 
PPTX
[테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요
Youngjae Kim
 
PDF
Asynchronous agents library(aal)pdf
HYUNWOO KIM
 
PDF
동시성 프로그래밍 하기 좋은 Clojure
Eunmin Kim
 
PPTX
[월간 슬라이드] 단기완성 Apache kafka
월간 IT 슬라이드
 
Kafka 자료 v0.1
Hyosang Hong
 
Kafka 자료 v0.1
Hyosang Hong
 
[Td 2015]개발하기 바쁜데 푸시서버와 메시지큐는 있는거 쓸래요(김영재)
Sang Don Kim
 
[테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요
Youngjae Kim
 
Asynchronous agents library(aal)pdf
HYUNWOO KIM
 
동시성 프로그래밍 하기 좋은 Clojure
Eunmin Kim
 
[월간 슬라이드] 단기완성 Apache kafka
월간 IT 슬라이드
 
Ad

RabbitMQ 알아보기

  • 2. X Producer : 메시지 보내는 프로그램 Consumer : 메시지 받는 프로그램 Queue : 메시지를 저장하는 버퍼 Exchange : 메시지를 큐에 분배하는 교환소
  • 3. Binding : Exchange가 Queue에 메시지를 보내도록 맺어진 관계
  • 4. • Consumer는 Queue에서 메시지를 받으면 Ack를 보내야 함 • Consumer가 Ack를 보내지 않고 죽거나 연결이 끊어지면 다른 Consumer에 메시지가 다시 배정됨 • Unacked 메시지가 많을수록 RabbitMQ가 메모리를 많이 사용함 • 프로그램에서 autoAck=true로 설정하면 메시지를 받자마 자 Ack를 보냄 (이 때, Consumer가 긴 작업 중 죽으면 메시지가 손실됨) Message Acknowledgment
  • 5. Message Durability • RabbitMQ 서버가 종료되면 Queue와 메시지를 모두 잃게 됨 • Queue를 잃지 않으려면 Queue를 선언할 때 durable=true 로 설정 (이미 만들어진 동일한 이름의 Queue가 있으면 durable 값이 적용되지 않음) • 메시지를 잃지 않으려면 Producer가 메시지를 젂송할 때 Persistent 메시지임을 표시 (MessageProperties.PERSISTENT_TEXT_PLAIN)
  • 7. 공식 홈페이지 튜토리얼 1.“Hello World!” 2.Work queues 3.Publish / Subscribe 4.Routing 5.Topics 6.RPC https://www.rabbitmq.com/getstarted.html
  • 8. 1. “Hello World” Producer Consumer Queue (name=hello)
  • 10. • RabbitMQ는 Unacked 메시지 수를 확인하지 않고 Queue 에 들어온 n번째 메시지를 n번째 Consumer에 맹목적으 로 젂달하기 때문에 바쁜 Consumer와 한가한 Consumer 가 생길 수 있음 • 이 때, prefetchCount=1로 basicQos를 설정하여 ack를 받기 젂에 새로운 메시지를 보내지 않도록 할 수 있음 (autoAck=true로 설정하면 의미 없음) Fair Dispatch
  • 11. 3. Publish / Subscribe Producer Queue1 Queue2Exchange (type=fanout) Broadcast!
  • 12. Temporary Queue • Queue 이름을 꼭 알아야 할 필요가 없을 때, 이름이 자동으로 정해지는 임시 Queue를 사용할 수 있음 • Non-Durable, Autodelete Queue
  • 13. 4. Routing Routing Key가 일치하는 Queue에만 전송!
  • 14. Routing Key를 동일하게 설정하여 브로드캐스팅처럼!
  • 15. Exchange Type • Fanout: 모든 Queue에 브로드캐스팅 • Direct: Routing Key가 일치하는 Queue에 젂달 • Topic: Routing Key의 패턴을 비교 • Headers: Routing Key 대신 Message Header 속성을 비교
  • 16. 5. Topic Routing Key의 패턴에 따라 메시지를 보냄!
  • 17. Routing Key 패턴 • 점(.)으로 구분된 여러 단어로 Routing Key를 만들 수 있음 (최대 255 바이트) - stock.usd.nyse - nyse.vmw - quick.orange.rabbit • 특수 기호 - * (star): 단 하나의 단어 - # (hash): 0개 이상의 단어
  • 18. "<speed>.<colour>.<species>" Q1 is interested in all the orange animals. Q2 wants to hear everything about rabbits, and everything about lazy animals.
  • 19. quick.orange.rabbit -> Q1, Q2 lazy.orange.elephant -> Q1, Q2 quick.orange.fox -> Q1 lazy.brown.fox -> Q2 lazy.pink.rabbit -> Q2 quick.brown.fox -> X orange -> X quick.orange.male.rabbit -> X lazy.orange.male.rabbit -> Q2
  • 20. 6. RPC 원격 컴퓨터에 있는 함수를 실행하고 결과를 기다릴 필요가 있을 때 (동기 처리)
  • 21. • 응답을 받기 위한 요청 메시지를 보낼 때에는 Callback Queue 주소를 함께 보내야 함 • 요청 메시지를 보낼 때 고유한 값으로 Correlation Id를 설정하여 Callback Queue를 통해 응답 받은 메 시지가 어느 요청에 대한 응답인지 확인할 수 있음 RPC 호출 파라미터
  • 22.