MQ
Producer(생산자)가 Message를 Queue에 넣어두면, Consumer가 Message를 가져와 처리하는 방식
– 필요한 이유 ?
Client와 동기방식으로 많은 데이터 통신을 하게 되면 병목현상이 생기게 되고, 서버의 성능이 저하되는데 이런 현상을 막기 위해 또 하나의 미들웨어에 메시지를 위임하여 순차적으로 처리를 하는 것.
AMQP
인스턴스가 데이터를 서로 교환할때 사용하는 방법으로 MQ를 오픈 소스에 기반한 표준 프로토콜이 AMQP(Advanced Message Queuing Protocol)이다.
Rabbit MQ
AMQP 자체가 프로토콜을 의미하는데 이 프로토콜을 구현한 MQ 제품 중 하나로 Publisher(Producer)로부터 메시지를 받아 Consumer에게 라우트 하는 것이 주된 역할이다.
Vhost(virtual host)
Virtual Host를 통해서 하나의 RabbitMQ 인스턴스 안에 사용하고 있는 Application을 분리할 수 있음.
Connection
물리적인 TCP Connection, HTTPS -> TLS(SSL) Connection을 사용.
Channel
하나의 물리적인 Connection 내에 생성되는 가상의 Connection.
Consumer의 process나 thread는 각자 Channel을 통해 Queue에 연결될 수 있음.
Producer/Publisher
메시지들을 전송하는 프로그램(Application)을 의미.
Producing/Publishing
메시지를 전송한다는 의미(Producer/Publisher가 메시지를 전송).
Queue
mailbox를 의미하며 RabbitMQ 시스템 내에 위치하며 메시지를 메모리나 디스크에 저장했다가 Consumer에게 메시지를 전달하는
역할을 하는데 Consumer 대신에 RabbitMQ가 보관하는 메시지 버퍼 외부연동 서버에서 이 비동기 처리를 쉽게 구현하기 위하여
MQ(Message Queuing)를 사용한다.
큐는 스스로 관심있는 메시지 타입을 지정한 Binding을 통해 Exchange에 말 그대로 bind 된다.
Binding
Exchange와 Queue를 연결(관계를 정의)한 일종의 라우팅 테이블이다.
같은 큐가 여러개의 Exchange에 bind 될 수 있고, 하나의 exchange에 여러개의 큐가 binding 될 수도 있다.
Exchange
Publisher(Producer)로부터 수신한 메시지를 적절한 Queue에 분배(전달)하는 라우터의 역할.
Exchange Type
+ Binding 과 메시지를 매칭시키기 위한 라우팅 알고리즘을 정의한 것으로 어떻게 메시지를 라우팅 시킬지 결정하며
브로커는 여러개의 Exchange Type 인스턴스를 가질 수 있다
- Direct exchange : (empty string) and amq.direct
참고 ) AMQP 정의 : 바인딩된 Queue중에서 메시지의 라우팅키와 매핑되어 있는 Queue로 메시지를 전달(1:1)
1:1 관계로 Unicast방식에 적합, 라운드 로빈 방식으로 여러 workers(Consumer)간 task를 분리
Exchange에 바인딩 된 Queue 중에서 메시지의 라우팅 키와 매핑되어 있는 Queue로 메시지를 전달한다. - Fanout exchange : amq.fanout
참고 ) AMQP 정의 : 메시지의 라우팅 키를 무시하고 Exchange에 바인딩 된 모든 Queue에 메시지를 전달(1:N) - Topic exchange : amq.topic
참고 ) AMQP 정의 : Exchange에 바인딩 된 Queue 중에서 메시지의 라우팅 키가 패턴에 맞는 Queue에게 모두 메시지를 전달 (Multicast) - Headers exchange : amq.match (and amq.headers in Rabbit MQ)
참고 ) AMQP 정의 : 라우팅 키 대신 메시지 헤더에 여러 속성들을 더해 속성들이 매칭 되는 큐에 메시지를 전달