관리 메뉴

HAMA 블로그

RabbitMQ 사용패턴들 본문

오픈소스, 미들웨어

RabbitMQ 사용패턴들

[하마] 이승현 (wowlsh93@gmail.com) 2015. 9. 4. 10:19

역주: 메세지큐에 대한 글을 적기 전에 왜 메세지큐냐? 를 먼저 생각해봐야한다.

메세지큐는 그냥 메세지를 전달해주는 서버인건데, 기술자체에 집중할 필요는 나중에 생각해보고 , 처음 생각해볼것은 왜 메세지를 전달하냐인데.. 이것의 가장 큰 이유는 행위(메세지)를 분산시키기 위함이라고 볼수있다. 말이 좀 어려운거 같은데 쉽게 말하면  대부분의 경우 하나의 일을 하기위한 프로세스에서는 쓸 필요가 없다는 뜻이고 , 어떤 행위에 대한 프로세스가 여러갈래인 경우에 사용하면 된다. 예를들어 브라우저에서 사용자가 버튼은 클릭했을때, 서버에 전달된 행위를 디비에 전달하고 바로 리턴해주는게 하나의 프로세스이라고 보면, 그 행위를 다른곳으로 전파시킬 필요가 있을때 메세지큐를 사용한다. 

실질적인 예로는 소셜서버에 글을 올렸을때, 내가 글을 올린것을 즉시 확인해야하는 나 자신을 위한 프로세스는 가장 우선되야하며, 내가 올린글이 다른사람에게 전달(feed) 되기 위한 시간은 즉시가 아니어도 된다. 그때 처음 버튼을 눌렀던 행위를 메세지큐에 던저넣고 바로 리턴한후에 나 자신을 위한 프로세스가 즉각적으로 응답되게 하는것이다. 

또 다른 예로는 IoT 엣지디바이스가 데이터를 생성하면 그 데이터를 메인 스트리밍을 따라서는 즉각적으로 사용자한테 전달되며 , 또다른 갈래로는 스톰같은 실시간 분석도구 라든지, 다른 서버로 보내는데 사용할수있다는것이다. 역시 행위(메세지) 를 여러갈래로 분산시킨다고 보면된다.



Hello World!




 * 메세지를 차례로 보내면 차례로 받는다. 





Work Queues

Distributing tasks among workers (the competing consumers pattern) (워커에게 하나씩 균등히 나누어 준다)

Round-robin dispatching


메세지를 하나의 큐에 보내면 , 소비자들이 하나씩 사이좋게 나누어 갖는다.
* 보내는쪽은 하나 받는쪽은 여러개

Fair dispatch



메세지를 하나의 큐에 보내면 , 소비자들이 나누어갖는데, 시간배분을 해준다. (위처럼 라운드로빈이라면 홀수로 받는 워커에 일이 가중될수도있다. 홀수로 보내지는 일이 항상 많을경우) 

Publish/Subscribe

Sending messages to many consumers at once (모든 소비자에게 다 준다) 

Exchanges


 * Exchanges 를 통해 여러개의 큐에  보낸다.  

 * 워커큐와 다른점은 워커큐는 항상 하나의 메세지는 하나의 컨슈머만 받을수있다는것이고, 

   생산자/소비자 패턴에서는 하나의 메세지를 여러 워커가 받을수있다라는 점. 

Bindings


Putting it all together



Routing

Receiving messages selectively (원하는 것을 가져가게 한다)

Direct exchange

 * Exchanges 를 통해 여러개의 큐에  구분하여  보낸다.  예를들어 한쪽은 크리티컬하여 하드에 저장될필요가있는것들이고 하나는 그냥 콘솔에 보여지고 버리는 로그 메세지들.

Multiple bindings



Putting it all together



Topics

Receiving messages based on a pattern (topics) (특정 패턴에 기반해 나누어 가진다) 

Topic exchange





RPC

Request/reply pattern




레퍼런스: https://www.rabbitmq.com/getstarted.html  

Comments