Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

RabbitMQ

499 views

Published on

RabbitMQ

Published in: Technology
  • Be the first to comment

  • Be the first to like this

RabbitMQ

  1. 1. RabbitMQ 개발팀
  2. 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. 3. • Message Queuing • 프로세스 또는 프로그램 인스턴스가 데이터를 서로 교환할때 사용하 는 방법 • 데이터를 교환할때 시스템이 관리하는 메세지 큐를 이용하는 것이 특징 • 대용량 데이터를 처리하기 위한 배치 작업이나, 체팅 서비스, 비동기 데이터를 처리할때 사용 MQ
  4. 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. 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. 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. 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. 8. 1. 설치 • Erlang 설치 • Rabbit MQ 다운로드 후 설치 2. 기본 명령 • 서버 기동 : sbin/rabbitmq-server start. 윈도우즈에서는 services.msc에서 서비스로 시작 • 상태 체크 : sbin/rabbitmqctl status • 서버 중지 : sbin/rabbitmqctl stop RabbitMQ
  9. 9. 3. Web Admin 모듈 • web admin 모듈 enable - "rabbitmq-plugins enable • rabbitmq_management" (이 다음 서비스를 restart해야 함) • http://localhost:15672/ 접속후 guest/guest로 로그인 RabbitMQ
  10. 10. RabbitMQ • Producer(메시지를 삽입하는 프로그램)을 P로, Consumer(큐에서 메시지를 꺼내는 프로그램)은 C으로 표기 • 실제로는 P 가 여러 개로 생각함 (이하 그림 동일) • C가 1개이므로 작업(메시지 처리)가 분산되지 않아, 실제로 사용할 일은 많지 않다. : 다만 로직을 P와 C로 분리하여, 오래 걸리는 작업은 C가 담당하면 사용자 입장에서의 응답속도가 빨라짐
  11. 11. RabbitMQ • 큐에서 순서대로 메시지를 읽어서 C1, C2, ... 순서대로 번갈아 수행한다. • 따라서 C1과 C2가 다른 메시지를 받지만 하는 일은 같다.
  12. 12. RabbitMQ • X(fanout)에 의해, 여러 큐에 모두 동일한 메시지가 삽입된다. • 따라서 C1, C2가 모두 동일한 메시지를 받지만 하는 일은 다르다. • Hellow World 예제에서 C가 하던 일을 C1, C2로 분리했다고 생각할 수 도 있다.
  13. 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. 14. RabbitMQ • 위의 Routing 예제와 비슷하다. 단 Key를 비교할 때, complete matching이 아니라 pattern matching을 사용 • 이 때 Key는 .(마침표)로 구분되어 word(토큰)로 나누어지며, 각 word에 대하여 *는 1 단어를, #는 0또는 여 러 개의 단어를 의미한다는 것이다. 개인적인 생각이지만, *와 #대신 일반적인 와일드카드인 ?와 *를 사용하 는 것이 더 직관적이었을 것이다. • 주의할 점은, 위 그림에서 P의 Key가 "lazy"일 때도 Q2에 전달된다는 것이다. 다시 말해 .(마침표)는 단어의 구분자일 뿐이며 X가 비교할 때에는 포함되지 않는다는 것이다. • 따라서 C1, C2는 다른 메시지를 받으며, 하는 일도 다르다.
  15. 15. RabbitMQ • RPC(Remote Procedure Call)를 사용하는 경우
  16. 16. RabbitMQ
  17. 17. 참고 http://ir.bagesoft.com/643

×