SlideShare a Scribd company logo
1 of 17
RabbitMQ
개발팀
Why Messaging?
• Get data from point A to point B
• Decouple publishers and consumers
• Queueing for later delivery
• Asynchronous
• Load balancing and scalability
• Message Queuing
• 프로세스 또는 프로그램 인스턴스가 데이터를 서로 교환할때 사용하
는 방법
• 데이터를 교환할때 시스템이 관리하는 메세지 큐를 이용하는 것이
특징
• 대용량 데이터를 처리하기 위한 배치 작업이나, 체팅 서비스, 비동기
데이터를 처리할때 사용
MQ
• Advanced Message Queueing Protocol
• http://www.amqp.org/
• Broadly applicable for enterprise
• Totally open
• Platform agnostic
• Interoperable
• Standard port is 5672/tcp
• List of brokers
AMQP
• RabbitMQ is an AMQP messaging broker
• Developed and maintained by Rabbit Technologies
Ltd, www.rabbitmq.com
• Joint venture between Cohesive Flexible Technologies
(www.cohesiveft.com) and LShift (www.lshift.net)
• Core development team in London, UK
• Rabbit is a part of AMQP Working Group
RabbitMQ What?
RabbitMQ Why?
• Robust messaging for applications
• Easy to use
• Runs on all major operating systems
• Supports a huge number of developer platforms
• Open source and commercially supported
• RabbitMQ is a broker written in Erlang
• RabbitMQ team alse provides Java and .NET clients
• Implements AMQP 0-8 spec
• Experimental products include AMQP-over-HTTP +
Javascript libraries, Erlang client, gateway for STOMP
clients, XMPP (Jabber) gateway
RabbitMQ
1. 설치
• Erlang 설치
• Rabbit MQ 다운로드 후 설치
2. 기본 명령
• 서버 기동 : sbin/rabbitmq-server start. 윈도우즈에서는 services.msc에서
서비스로 시작
• 상태 체크 : sbin/rabbitmqctl status
• 서버 중지 : sbin/rabbitmqctl stop
RabbitMQ
3. Web Admin 모듈
• web admin 모듈 enable - "rabbitmq-plugins enable
• rabbitmq_management" (이 다음 서비스를 restart해야 함)
• http://localhost:15672/ 접속후 guest/guest로 로그인
RabbitMQ
RabbitMQ
• Producer(메시지를 삽입하는 프로그램)을 P로, Consumer(큐에서 메시지를 꺼내는 프로그램)은 C으로 표기
• 실제로는 P 가 여러 개로 생각함 (이하 그림 동일)
• C가 1개이므로 작업(메시지 처리)가 분산되지 않아, 실제로 사용할 일은 많지 않다.
: 다만 로직을 P와 C로 분리하여, 오래 걸리는 작업은 C가 담당하면 사용자 입장에서의 응답속도가 빨라짐
RabbitMQ
• 큐에서 순서대로 메시지를 읽어서 C1, C2, ... 순서대로 번갈아 수행한다.
• 따라서 C1과 C2가 다른 메시지를 받지만 하는 일은 같다.
RabbitMQ
• X(fanout)에 의해, 여러 큐에 모두 동일한 메시지가 삽입된다.
• 따라서 C1, C2가 모두 동일한 메시지를 받지만 하는 일은 다르다.
• Hellow World 예제에서 C가 하던 일을 C1, C2로 분리했다고 생각할 수 도 있다.
RabbitMQ
• C가 X(direct)와 큐를 binding할 때, Key를 명시하고, 메시지의 Key와 비교해서 동일한(complete
matching)경우만 각 큐에 삽입된다.
• 위의 그림에서 Key가 error일 때는 두 큐에 모두 삽입되고, Key가 info, warning일 경우에는 두번 째 큐
에만 삽입된다. 그 외의 Key는 큐에 삽입되지 않는다. 다시 말해, 그 외의 key를 가진 메시지는 버려진
다.
• 위의 경우 C1은 중대한 오류(error)에 대해서만 처리하고, C2는 모든 오류(info, error, warning)에 대해
서 처리한다.
• 따라서 C1, C2는 다른 메시지를 받으며, 하는 일도 다르다.
RabbitMQ
• 위의 Routing 예제와 비슷하다. 단 Key를 비교할 때, complete matching이 아니라 pattern matching을 사용
• 이 때 Key는 .(마침표)로 구분되어 word(토큰)로 나누어지며, 각 word에 대하여 *는 1 단어를, #는 0또는 여
러 개의 단어를 의미한다는 것이다. 개인적인 생각이지만, *와 #대신 일반적인 와일드카드인 ?와 *를 사용하
는 것이 더 직관적이었을 것이다.
• 주의할 점은, 위 그림에서 P의 Key가 "lazy"일 때도 Q2에 전달된다는 것이다. 다시 말해 .(마침표)는 단어의
구분자일 뿐이며 X가 비교할 때에는 포함되지 않는다는 것이다.
• 따라서 C1, C2는 다른 메시지를 받으며, 하는 일도 다르다.
RabbitMQ
• RPC(Remote Procedure Call)를 사용하는 경우
RabbitMQ
참고
http://ir.bagesoft.com/643

More Related Content

What's hot

신림프로그래머 Kafka study
신림프로그래머 Kafka study신림프로그래머 Kafka study
신림프로그래머 Kafka studyRjs Ryu
 
모바일 메신저 아키텍쳐 소개
모바일 메신저 아키텍쳐 소개모바일 메신저 아키텍쳐 소개
모바일 메신저 아키텍쳐 소개Hyogi Jung
 
Get started with netty
Get started with nettyGet started with netty
Get started with netty창규 김
 
N04 xmpp and_android
N04 xmpp and_androidN04 xmpp and_android
N04 xmpp and_androidSun-Jin Jang
 
Apache kafka 관리와 모니터링
Apache kafka 관리와 모니터링Apache kafka 관리와 모니터링
Apache kafka 관리와 모니터링JANGWONSEO4
 
Node-express 채팅 서버 개발기
Node-express 채팅 서버 개발기Node-express 채팅 서버 개발기
Node-express 채팅 서버 개발기정웅 박
 
[E6]2012. netty internals
[E6]2012. netty internals[E6]2012. netty internals
[E6]2012. netty internalsNAVER D2
 
20170609 tech day_4th-nginx(lb)-이재훈
20170609 tech day_4th-nginx(lb)-이재훈20170609 tech day_4th-nginx(lb)-이재훈
20170609 tech day_4th-nginx(lb)-이재훈ymtech
 
[2018] 프런트엔드 성능 최적화
[2018] 프런트엔드 성능 최적화[2018] 프런트엔드 성능 최적화
[2018] 프런트엔드 성능 최적화NHN FORWARD
 
Apache kafka performance(throughput) - without data loss and guaranteeing dat...
Apache kafka performance(throughput) - without data loss and guaranteeing dat...Apache kafka performance(throughput) - without data loss and guaranteeing dat...
Apache kafka performance(throughput) - without data loss and guaranteeing dat...SANG WON PARK
 
Optane DC Persistent Memory(DCPMM) 성능 테스트
Optane DC Persistent Memory(DCPMM) 성능 테스트Optane DC Persistent Memory(DCPMM) 성능 테스트
Optane DC Persistent Memory(DCPMM) 성능 테스트SANG WON PARK
 
Apache kafka performance(latency)_benchmark_v0.3
Apache kafka performance(latency)_benchmark_v0.3Apache kafka performance(latency)_benchmark_v0.3
Apache kafka performance(latency)_benchmark_v0.3SANG WON PARK
 
Streaming platform Kafka in SK planet
Streaming platform Kafka in SK planetStreaming platform Kafka in SK planet
Streaming platform Kafka in SK planetByeongsu Kang
 
[112]clova platform 인공지능을 엮는 기술
[112]clova platform 인공지능을 엮는 기술[112]clova platform 인공지능을 엮는 기술
[112]clova platform 인공지능을 엮는 기술NAVER D2
 
Kgc2014 one daylearnunitycryptography-f
Kgc2014 one daylearnunitycryptography-fKgc2014 one daylearnunitycryptography-f
Kgc2014 one daylearnunitycryptography-fSeungmin Shin
 

What's hot (20)

신림프로그래머 Kafka study
신림프로그래머 Kafka study신림프로그래머 Kafka study
신림프로그래머 Kafka study
 
모바일 메신저 아키텍쳐 소개
모바일 메신저 아키텍쳐 소개모바일 메신저 아키텍쳐 소개
모바일 메신저 아키텍쳐 소개
 
Get started with netty
Get started with nettyGet started with netty
Get started with netty
 
N04 xmpp and_android
N04 xmpp and_androidN04 xmpp and_android
N04 xmpp and_android
 
네트워크 기본
네트워크 기본네트워크 기본
네트워크 기본
 
Apache kafka 관리와 모니터링
Apache kafka 관리와 모니터링Apache kafka 관리와 모니터링
Apache kafka 관리와 모니터링
 
Node-express 채팅 서버 개발기
Node-express 채팅 서버 개발기Node-express 채팅 서버 개발기
Node-express 채팅 서버 개발기
 
[E6]2012. netty internals
[E6]2012. netty internals[E6]2012. netty internals
[E6]2012. netty internals
 
20170609 tech day_4th-nginx(lb)-이재훈
20170609 tech day_4th-nginx(lb)-이재훈20170609 tech day_4th-nginx(lb)-이재훈
20170609 tech day_4th-nginx(lb)-이재훈
 
Netty4.x
Netty4.xNetty4.x
Netty4.x
 
[2018] 프런트엔드 성능 최적화
[2018] 프런트엔드 성능 최적화[2018] 프런트엔드 성능 최적화
[2018] 프런트엔드 성능 최적화
 
Kafka 자료 v0.1
Kafka 자료 v0.1Kafka 자료 v0.1
Kafka 자료 v0.1
 
Apache kafka performance(throughput) - without data loss and guaranteeing dat...
Apache kafka performance(throughput) - without data loss and guaranteeing dat...Apache kafka performance(throughput) - without data loss and guaranteeing dat...
Apache kafka performance(throughput) - without data loss and guaranteeing dat...
 
Performance test
Performance testPerformance test
Performance test
 
Optane DC Persistent Memory(DCPMM) 성능 테스트
Optane DC Persistent Memory(DCPMM) 성능 테스트Optane DC Persistent Memory(DCPMM) 성능 테스트
Optane DC Persistent Memory(DCPMM) 성능 테스트
 
Apache kafka performance(latency)_benchmark_v0.3
Apache kafka performance(latency)_benchmark_v0.3Apache kafka performance(latency)_benchmark_v0.3
Apache kafka performance(latency)_benchmark_v0.3
 
Streaming platform Kafka in SK planet
Streaming platform Kafka in SK planetStreaming platform Kafka in SK planet
Streaming platform Kafka in SK planet
 
[112]clova platform 인공지능을 엮는 기술
[112]clova platform 인공지능을 엮는 기술[112]clova platform 인공지능을 엮는 기술
[112]clova platform 인공지능을 엮는 기술
 
Kgc2014 one daylearnunitycryptography-f
Kgc2014 one daylearnunitycryptography-fKgc2014 one daylearnunitycryptography-f
Kgc2014 one daylearnunitycryptography-f
 
자바채팅 다중
자바채팅 다중자바채팅 다중
자바채팅 다중
 

Viewers also liked

톰캣 #01-소개
톰캣 #01-소개톰캣 #01-소개
톰캣 #01-소개GyuSeok Lee
 
Spring-Boot (springcamp2014)
Spring-Boot (springcamp2014)Spring-Boot (springcamp2014)
Spring-Boot (springcamp2014)sung yong jung
 
오픈소스 그리고 기회
오픈소스 그리고 기회오픈소스 그리고 기회
오픈소스 그리고 기회Sungju Jin
 
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)Heungsub Lee
 
톰캣 운영 노하우
톰캣 운영 노하우톰캣 운영 노하우
톰캣 운영 노하우jieunsys
 
[오픈소스컨설팅]Tomcat6&7 How To
[오픈소스컨설팅]Tomcat6&7 How To[오픈소스컨설팅]Tomcat6&7 How To
[오픈소스컨설팅]Tomcat6&7 How ToJi-Woong Choi
 
[오픈소스컨설팅]엔터프라이즈 오픈소스 도입전략
[오픈소스컨설팅]엔터프라이즈 오픈소스 도입전략[오픈소스컨설팅]엔터프라이즈 오픈소스 도입전략
[오픈소스컨설팅]엔터프라이즈 오픈소스 도입전략Ji-Woong Choi
 

Viewers also liked (8)

톰캣 #01-소개
톰캣 #01-소개톰캣 #01-소개
톰캣 #01-소개
 
Spring-Boot (springcamp2014)
Spring-Boot (springcamp2014)Spring-Boot (springcamp2014)
Spring-Boot (springcamp2014)
 
오픈소스 그리고 기회
오픈소스 그리고 기회오픈소스 그리고 기회
오픈소스 그리고 기회
 
Tomcat
TomcatTomcat
Tomcat
 
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
 
톰캣 운영 노하우
톰캣 운영 노하우톰캣 운영 노하우
톰캣 운영 노하우
 
[오픈소스컨설팅]Tomcat6&7 How To
[오픈소스컨설팅]Tomcat6&7 How To[오픈소스컨설팅]Tomcat6&7 How To
[오픈소스컨설팅]Tomcat6&7 How To
 
[오픈소스컨설팅]엔터프라이즈 오픈소스 도입전략
[오픈소스컨설팅]엔터프라이즈 오픈소스 도입전략[오픈소스컨설팅]엔터프라이즈 오픈소스 도입전략
[오픈소스컨설팅]엔터프라이즈 오픈소스 도입전략
 

Similar to RabbitMQ

Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...hoondong kim
 
Computing Paradigm - rev1
Computing Paradigm - rev1Computing Paradigm - rev1
Computing Paradigm - rev1Yong Heui Cho
 
동시성 프로그래밍 기초 in GO
동시성 프로그래밍 기초 in GO 동시성 프로그래밍 기초 in GO
동시성 프로그래밍 기초 in GO 라한사 아
 
Kubernetes in action
Kubernetes in actionKubernetes in action
Kubernetes in actionBingu Shim
 
MSA와 infra
MSA와 infraMSA와 infra
MSA와 infraJe Hun Kim
 
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스Dan Kang (강동한)
 
[Td 2015]개발하기 바쁜데 푸시서버와 메시지큐는 있는거 쓸래요(김영재)
[Td 2015]개발하기 바쁜데 푸시서버와 메시지큐는 있는거 쓸래요(김영재)[Td 2015]개발하기 바쁜데 푸시서버와 메시지큐는 있는거 쓸래요(김영재)
[Td 2015]개발하기 바쁜데 푸시서버와 메시지큐는 있는거 쓸래요(김영재)Sang Don Kim
 
NET 최선단 기술에 의한 고성능 웹 애플리케이션
NET 최선단 기술에 의한 고성능 웹 애플리케이션NET 최선단 기술에 의한 고성능 웹 애플리케이션
NET 최선단 기술에 의한 고성능 웹 애플리케이션흥배 최
 
golang과 websocket을 활용한 서버프로그래밍 - 장애없는 서버 런칭 도전기
golang과 websocket을 활용한 서버프로그래밍 - 장애없는 서버 런칭 도전기golang과 websocket을 활용한 서버프로그래밍 - 장애없는 서버 런칭 도전기
golang과 websocket을 활용한 서버프로그래밍 - 장애없는 서버 런칭 도전기Sangik Bae
 
R2서버정진욱
R2서버정진욱R2서버정진욱
R2서버정진욱jungjinwouk
 
Quic을 이용한 네트워크 성능 개선
 Quic을 이용한 네트워크 성능 개선 Quic을 이용한 네트워크 성능 개선
Quic을 이용한 네트워크 성능 개선NAVER D2
 
Open infradays 2019_msa_k8s
Open infradays 2019_msa_k8sOpen infradays 2019_msa_k8s
Open infradays 2019_msa_k8sHyoungjun Kim
 
C++ GUI 라이브러리 소개: Qt & Nana
C++ GUI 라이브러리 소개: Qt & NanaC++ GUI 라이브러리 소개: Qt & Nana
C++ GUI 라이브러리 소개: Qt & NanaLazy Ahasil
 
[테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요
[테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요[테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요
[테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요Youngjae Kim
 
Asynchronous agents library(aal)pdf
Asynchronous agents library(aal)pdfAsynchronous agents library(aal)pdf
Asynchronous agents library(aal)pdfHYUNWOO KIM
 
Cloud-Barista 제3차 오픈 컨퍼런스 : CB-Larva - Cloud-Barista 인큐베이터(Cloud-Barista Incu...
Cloud-Barista 제3차 오픈 컨퍼런스 : CB-Larva - Cloud-Barista 인큐베이터(Cloud-Barista Incu...Cloud-Barista 제3차 오픈 컨퍼런스 : CB-Larva - Cloud-Barista 인큐베이터(Cloud-Barista Incu...
Cloud-Barista 제3차 오픈 컨퍼런스 : CB-Larva - Cloud-Barista 인큐베이터(Cloud-Barista Incu...Cloud-Barista Community
 
Tcp ip & io model
Tcp ip & io modelTcp ip & io model
Tcp ip & io modelNam Hyeonuk
 
TestCloud2018-1(answer)
TestCloud2018-1(answer)TestCloud2018-1(answer)
TestCloud2018-1(answer)Yong Heui Cho
 
Private PaaS with Docker, spring cloud and mesos
Private PaaS with Docker, spring cloud and mesos Private PaaS with Docker, spring cloud and mesos
Private PaaS with Docker, spring cloud and mesos uEngine Solutions
 

Similar to RabbitMQ (20)

Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...
 
Computing Paradigm - rev1
Computing Paradigm - rev1Computing Paradigm - rev1
Computing Paradigm - rev1
 
Computing Paradigm
Computing ParadigmComputing Paradigm
Computing Paradigm
 
동시성 프로그래밍 기초 in GO
동시성 프로그래밍 기초 in GO 동시성 프로그래밍 기초 in GO
동시성 프로그래밍 기초 in GO
 
Kubernetes in action
Kubernetes in actionKubernetes in action
Kubernetes in action
 
MSA와 infra
MSA와 infraMSA와 infra
MSA와 infra
 
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
 
[Td 2015]개발하기 바쁜데 푸시서버와 메시지큐는 있는거 쓸래요(김영재)
[Td 2015]개발하기 바쁜데 푸시서버와 메시지큐는 있는거 쓸래요(김영재)[Td 2015]개발하기 바쁜데 푸시서버와 메시지큐는 있는거 쓸래요(김영재)
[Td 2015]개발하기 바쁜데 푸시서버와 메시지큐는 있는거 쓸래요(김영재)
 
NET 최선단 기술에 의한 고성능 웹 애플리케이션
NET 최선단 기술에 의한 고성능 웹 애플리케이션NET 최선단 기술에 의한 고성능 웹 애플리케이션
NET 최선단 기술에 의한 고성능 웹 애플리케이션
 
golang과 websocket을 활용한 서버프로그래밍 - 장애없는 서버 런칭 도전기
golang과 websocket을 활용한 서버프로그래밍 - 장애없는 서버 런칭 도전기golang과 websocket을 활용한 서버프로그래밍 - 장애없는 서버 런칭 도전기
golang과 websocket을 활용한 서버프로그래밍 - 장애없는 서버 런칭 도전기
 
R2서버정진욱
R2서버정진욱R2서버정진욱
R2서버정진욱
 
Quic을 이용한 네트워크 성능 개선
 Quic을 이용한 네트워크 성능 개선 Quic을 이용한 네트워크 성능 개선
Quic을 이용한 네트워크 성능 개선
 
Open infradays 2019_msa_k8s
Open infradays 2019_msa_k8sOpen infradays 2019_msa_k8s
Open infradays 2019_msa_k8s
 
C++ GUI 라이브러리 소개: Qt & Nana
C++ GUI 라이브러리 소개: Qt & NanaC++ GUI 라이브러리 소개: Qt & Nana
C++ GUI 라이브러리 소개: Qt & Nana
 
[테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요
[테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요[테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요
[테크데이즈2015] 개발하기 바쁜데 푸시와 메시지큐는 있는거 쓸래요
 
Asynchronous agents library(aal)pdf
Asynchronous agents library(aal)pdfAsynchronous agents library(aal)pdf
Asynchronous agents library(aal)pdf
 
Cloud-Barista 제3차 오픈 컨퍼런스 : CB-Larva - Cloud-Barista 인큐베이터(Cloud-Barista Incu...
Cloud-Barista 제3차 오픈 컨퍼런스 : CB-Larva - Cloud-Barista 인큐베이터(Cloud-Barista Incu...Cloud-Barista 제3차 오픈 컨퍼런스 : CB-Larva - Cloud-Barista 인큐베이터(Cloud-Barista Incu...
Cloud-Barista 제3차 오픈 컨퍼런스 : CB-Larva - Cloud-Barista 인큐베이터(Cloud-Barista Incu...
 
Tcp ip & io model
Tcp ip & io modelTcp ip & io model
Tcp ip & io model
 
TestCloud2018-1(answer)
TestCloud2018-1(answer)TestCloud2018-1(answer)
TestCloud2018-1(answer)
 
Private PaaS with Docker, spring cloud and mesos
Private PaaS with Docker, spring cloud and mesos Private PaaS with Docker, spring cloud and mesos
Private PaaS with Docker, spring cloud and mesos
 

More from Jong Woo Rhee

More from Jong Woo Rhee (10)

Jpa 필드 와 컬럼 매핑 레퍼런스
Jpa 필드 와 컬럼 매핑 레퍼런스Jpa 필드 와 컬럼 매핑 레퍼런스
Jpa 필드 와 컬럼 매핑 레퍼런스
 
Git hub repository 관리 방안
Git hub repository 관리 방안Git hub repository 관리 방안
Git hub repository 관리 방안
 
Connection pool
Connection poolConnection pool
Connection pool
 
Postgresql stored procedure
Postgresql stored procedurePostgresql stored procedure
Postgresql stored procedure
 
Ionic project guide
Ionic project guideIonic project guide
Ionic project guide
 
Ionics구조
Ionics구조Ionics구조
Ionics구조
 
Java8 람다
Java8 람다Java8 람다
Java8 람다
 
Hibernate 기초
Hibernate 기초Hibernate 기초
Hibernate 기초
 
Glances
GlancesGlances
Glances
 
Jmeter
JmeterJmeter
Jmeter
 

RabbitMQ

  • 2. Why Messaging? • Get data from point A to point B • Decouple publishers and consumers • Queueing for later delivery • Asynchronous • Load balancing and scalability
  • 3. • Message Queuing • 프로세스 또는 프로그램 인스턴스가 데이터를 서로 교환할때 사용하 는 방법 • 데이터를 교환할때 시스템이 관리하는 메세지 큐를 이용하는 것이 특징 • 대용량 데이터를 처리하기 위한 배치 작업이나, 체팅 서비스, 비동기 데이터를 처리할때 사용 MQ
  • 4. • Advanced Message Queueing Protocol • http://www.amqp.org/ • Broadly applicable for enterprise • Totally open • Platform agnostic • Interoperable • Standard port is 5672/tcp • List of brokers AMQP
  • 5. • RabbitMQ is an AMQP messaging broker • Developed and maintained by Rabbit Technologies Ltd, www.rabbitmq.com • Joint venture between Cohesive Flexible Technologies (www.cohesiveft.com) and LShift (www.lshift.net) • Core development team in London, UK • Rabbit is a part of AMQP Working Group RabbitMQ What?
  • 6. RabbitMQ Why? • Robust messaging for applications • Easy to use • Runs on all major operating systems • Supports a huge number of developer platforms • Open source and commercially supported
  • 7. • RabbitMQ is a broker written in Erlang • RabbitMQ team alse provides Java and .NET clients • Implements AMQP 0-8 spec • Experimental products include AMQP-over-HTTP + Javascript libraries, Erlang client, gateway for STOMP clients, XMPP (Jabber) gateway RabbitMQ
  • 8. 1. 설치 • Erlang 설치 • Rabbit MQ 다운로드 후 설치 2. 기본 명령 • 서버 기동 : sbin/rabbitmq-server start. 윈도우즈에서는 services.msc에서 서비스로 시작 • 상태 체크 : sbin/rabbitmqctl status • 서버 중지 : sbin/rabbitmqctl stop RabbitMQ
  • 9. 3. Web Admin 모듈 • web admin 모듈 enable - "rabbitmq-plugins enable • rabbitmq_management" (이 다음 서비스를 restart해야 함) • http://localhost:15672/ 접속후 guest/guest로 로그인 RabbitMQ
  • 10. RabbitMQ • Producer(메시지를 삽입하는 프로그램)을 P로, Consumer(큐에서 메시지를 꺼내는 프로그램)은 C으로 표기 • 실제로는 P 가 여러 개로 생각함 (이하 그림 동일) • C가 1개이므로 작업(메시지 처리)가 분산되지 않아, 실제로 사용할 일은 많지 않다. : 다만 로직을 P와 C로 분리하여, 오래 걸리는 작업은 C가 담당하면 사용자 입장에서의 응답속도가 빨라짐
  • 11. RabbitMQ • 큐에서 순서대로 메시지를 읽어서 C1, C2, ... 순서대로 번갈아 수행한다. • 따라서 C1과 C2가 다른 메시지를 받지만 하는 일은 같다.
  • 12. RabbitMQ • X(fanout)에 의해, 여러 큐에 모두 동일한 메시지가 삽입된다. • 따라서 C1, C2가 모두 동일한 메시지를 받지만 하는 일은 다르다. • Hellow World 예제에서 C가 하던 일을 C1, C2로 분리했다고 생각할 수 도 있다.
  • 13. RabbitMQ • C가 X(direct)와 큐를 binding할 때, Key를 명시하고, 메시지의 Key와 비교해서 동일한(complete matching)경우만 각 큐에 삽입된다. • 위의 그림에서 Key가 error일 때는 두 큐에 모두 삽입되고, Key가 info, warning일 경우에는 두번 째 큐 에만 삽입된다. 그 외의 Key는 큐에 삽입되지 않는다. 다시 말해, 그 외의 key를 가진 메시지는 버려진 다. • 위의 경우 C1은 중대한 오류(error)에 대해서만 처리하고, C2는 모든 오류(info, error, warning)에 대해 서 처리한다. • 따라서 C1, C2는 다른 메시지를 받으며, 하는 일도 다르다.
  • 14. RabbitMQ • 위의 Routing 예제와 비슷하다. 단 Key를 비교할 때, complete matching이 아니라 pattern matching을 사용 • 이 때 Key는 .(마침표)로 구분되어 word(토큰)로 나누어지며, 각 word에 대하여 *는 1 단어를, #는 0또는 여 러 개의 단어를 의미한다는 것이다. 개인적인 생각이지만, *와 #대신 일반적인 와일드카드인 ?와 *를 사용하 는 것이 더 직관적이었을 것이다. • 주의할 점은, 위 그림에서 P의 Key가 "lazy"일 때도 Q2에 전달된다는 것이다. 다시 말해 .(마침표)는 단어의 구분자일 뿐이며 X가 비교할 때에는 포함되지 않는다는 것이다. • 따라서 C1, C2는 다른 메시지를 받으며, 하는 일도 다르다.
  • 15. RabbitMQ • RPC(Remote Procedure Call)를 사용하는 경우