정보공간_1

[2기 수원 이상웅] RabbitMQ 본문

IT 놀이터/Elite Member Tech & Talk

[2기 수원 이상웅] RabbitMQ

알 수 없는 사용자 2012. 8. 27. 18:10


1. RabbitMQ 무엇인가?

RabbitMQ Message Queue System으로 ActiveMQ, ZeroMQ 등과 비슷하다.

RabbitMQ 경우에는 성능상을 이점을 위하여 최신 모델인 AMQP(Advanced Message Queuing Protocol) 사용하였으며, 개발은 Erlang OTP 되었다.

Message Queue 사용하면 프론트엔드에 위치한 웹서버에서 수행해야될 일들을 백엔드단의 데몬 어플리케이션들에게 효과적으로 일을 나눠줄 있으며, 이는 기본적인 분산 처리의 개념과 같다.

다음은 RabbitMQ 장점이다.

1) 응용 프로그램을 위한 강력한 메세지 처리 방법을 제공

2) 사용하기 쉽다.

3) 주요 운영체제에서 모두 실행 가능하다.

4) 많은 수의 개발자 플랫폼을 지원

5) 오픈 소스

 


2. RabbitMQ 설치 (Debian / Ubuntu 기준)

1) /etc/apt/sources.list 다음의 내용을 추가

deb http://www.rabbitmq.com/debian/ testing main

2) public key 추가

wget http://www.rabbitmq.com/rabbitmq-signing-key-public.asc

sudo apt-key add rabbitmq-signing-key-public.asc

3) deb 패키지 설치

sudo apt-get update

sudo apt-get install rabbitmq-server

4) 동시 사용자 수를 변경함 (최적화를 위해서)

ulimit -n 1024

 


3. RabbitMQ 사용을 위한 Tutorial


RabbitMQ의 경우에는 Message 사용에 있어서 다음과 같이 6개의 방법을 제공한다. 각각의 특성을 알아보자.

편의상 Producer(메시지를 삽입하는 프로그램) P, Consumer(큐에서 메시지를 꺼내는 프로그램) C으로 표기한다. 웹서비스에 이용한다면 아마도 P는 웹 어플리케이션(front-end)이 될 것이고, C는 백그라운드로 동작하는 데몬(back-end)이 될 것이다.

 

1) Hello World

 이와 같은 경우에는 C가 하나이므로, 메세지 처리를 분산 시킬 수 없다는 단점이 있다. 다만 P가 오래 걸리는 작업을 수행해야 될 경우 다음과 같은 형태를 쓰면 작업이 큐에 쌓이게 되고, C는 계속적으로 처리하게 되므로, P에 연결된 사용자들은 응답 속도의 향상을 느낄 수 있을 것 이다.

 

2) Work Queues (Round-Robin)

 큐에서 순서대로 메세지를 읽어서 C1, C2 ... 순으로 일을 수행하게 된다. 따라서 C1 C2는 서로 다른 메세지를 읽게 되지만, 하는 일은 같다.

 

3) Publish/Subscribe (FanOut)

 X(FanOut)에 의해 여러 큐에 동일한 메세지가 삽입된다. 따라서 C1, C2가 동일한 메세지를 받지만 하는일은 서로 다르다. 이는 데몬(C)의 개수가 증가함에 따라 병렬 처리가 되어 처리 속도가 향상 될 가능성이 있다.

 

4) Routing (Direct, Exact Matching)

 C X(direct)와 큐를 binding할 때, Key를 명시하고, 메시지의 Key와 비교해서 동일한 경우에만 각 큐에 삽입된다. 그림에서 Key error일 때는 두 큐에 모두 삽입되고, Key info, warning일 경우에는 두번째 큐에만 삽입된다. 그 외의 Key는 큐에 삽입되지 않는다. 따라서 그 외의 key를 가진 메시지는 버려 진다. 위의 경우 C1error에 대해서만 처리하고, C2info, error, warning 키에 대해서 처리한다. 따라서 C1, C2는 서로 다른 메시지를 받으며, 하는 일도 다르다.

 

5) Topics (Pattern Matching)

 위의 Routing 예제와 비슷하다. Key를 비교할 때, complete matching이 아니라 pattern matching을 사용한다.이 때 Key .(마침표)로 구분되어 word(토큰)로 나누어지며, word에 대하여 * 1 단어를, # 0또는 여러 개의 단어를 의미한다. 따라서 C1, C2는 다른 메시지를 받으며, 하는 일도 다르다.