래빗MQ에서 사용하는 프로토콜인 AMQP의 컨셉

1.
AMQP 0-9-1은?
Advanced Message Queuing Protocol
클라이언트 어플리케이션을 메시징 미들웨어 브로커와 통신할 수 있도록 하는 메시징 프로토콜
메시징 브로커는 퍼블리셔(프로듀서라고도 함)로부터 메시지를 받아서 컨슈머로(처리하는 어플리케이션) 라우팅한다.
네트워크 프로토콜이므로 퍼블리셔와 컨슈머, 브로커는 다른 머신에 있어도 된다.

2.
AMQP 0-9-1 모델 요약
메시지는 exchange에 퍼블리시된다. exchange는 우체국, 우체통에 비교된다.
exchange는 binding이라는 규칙을 사용하여 메시지를 복사하여 큐로 분배한다.
AMQP 브로커는 메시지를 큐를 구독한 컨슈머로 전달하거나, 필요시 컨슈머가 큐에서 메시지를 가져온다.

메시지를 퍼블리시할때, 퍼블리셔는 다양한 메시지 속성을 지정할 수 있다.(메시지 메타-데이터)
이 메타-데이터의 일부는 브로커에 의해 쓰일 수 있다. 그러나 나머지는 완전히 브로커에게는 불투명하고 메시지를 받는 어플리케이션에 의해서만 쓰인다.

네트워크는 불안정적이고 어플리케이션은 프로세스에 실패할 수 있다. 그래서 AMQP에는 메시지 확인(message acknowledgements) 개념이 있다.
메시지가 컨슈머로 전달될 때, 컨슈머는 자동적으로, 또는 개발자가 선택한 때 바로 브로커에게 알린다.
브로커는 메시지에 대한 알림을 받으면 메시지(또는 메시지 그룹)를 큐에서 완전히 지운다.

특정 상황에서, 메시지가 라우팅되지 못했을때, 메시지는 퍼블리셔에게 되돌아가거나, 드랍되거나, 만약 브로커가 extension을 구현했으면 '죽은 편지 큐'로 이동된다.
퍼블리셔는 특정 파라미터를 사용하여 퍼블리시 해서 어떻게 상황들을 처리할지 선택한다.

3.
queue, exchange, binding을 집합적으로 AMQP 엔티티라고 한다.

exchange는 메시지가 전송되는 AMQP 엔티티이다.
exchange는 메시지를 가져와서 0개 이상의 큐로 라우팅한다.
exchange 타입과 binding이라고 불리는 규칙을 따른다.
AMQP 0-9-1는 4가지 exchange type 타입을 제공한다.

direct exchange
fanout exchange
topic exchange
headers exchange

exchange 외에도 많은 속성으로 선언된다.
이름
내구성 (브로커 재시작에도 exchange survive)
자동삭제 (마지막 큐가 unbound되면 exchange 삭제)
아규먼츠 (옵셔널, 플러그인 및 브로커-특정 특성에 의해 쓰임)

exchanges는 내구성이 있거나 일시적일 수 있다.
내구성이 있으면(durable) 브로커 재시작을 해도 지속되고, 일시적인건(transient) 그렇지 않다.(재선언 해줘야 함)

default exchange는 이름없는 direct exchange이다. 생성된 모든 큐는 큐 이름과 같은 라우팅 키로 자동 binding.
예를 들어 search-indexing-online이란 큐를 선언한면 브로커는 search-indexing-online 라우팅 키로 default exchange에 bind한다.
따라서 라우팅 키를 사용하여 기본 교환에 게시된 메시지는 search-indexing-online 큐로 라우팅된다.

4.
direct exchange는 메시지 라우팅 키를 기반으로 메시지를큐에 전달. 유니캐스트 라우팅에 이상적이다.(멀티캐스트 라우팅에도 사용 가능)
큐는 라우팅키 K로 exchange에 바인딩된다.
라우팅키 R을 가진 새로운 메시지가 exchange에 도달하면 exchange는 K=R이면 큐에 라우팅한다.
direct exchange는 라운드 로빈 방식으로 여러 작업자 간의 작업을 배포하는데 사용

fanout exchange는 바인딩 된 모든 대기열로 라우팅하고 라우팅 키는 무시됨.
N개의 큐가 fanout exchange에 바인드 된 경우 새 메시지가 exchange에 publish될때 메시지 카피들이 N개의 대기열에 전달됨
브로드 캐스트 라우팅에 이상적

topic exchange는 메시지 라우팅키와 패팅 사이에 일치에 근거해서 하나 또는 많은 큐에 메시지를 라우팅한다.

header exchange는 라우팅 키 보다는 메시지 헤더로 쉽게 표현되는 다수의 속성으로 라우팅하기 위해서 설계되었다.
header exchange는 라우팅 키 속성을 개무시한다. 대신 라우팅을 위해서 사용되는 속성은 헤더에 있다.


출처 : https://www.rabbitmq.com/tutorials/amqp-concepts.html

댓글

이 블로그의 인기 게시물

래빗MQ 클러스터링 - 2. 네트워크 파티션

래빗MQ 클러스터링 - 1. 클러스터링

래빗MQ 메시지 속성