ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • AMQP ( Advaced Messaging Queing Protocol )
    카테고리 없음 2016. 6. 21. 09:13
    # AMQP ( Advanced Messaging Queing Protocol )

    + MQ의 오픈소스에 기반한 표준 프로토콜
    + MQ 제품들은 여러가지가 존재하나 가장 많이 사용되는 것은 Erlang과 자바로 작성된 RabbitMQ 




    # 등장배경

    + 상용 MQ들이 많았지만 대부분 플랫폼 종속적임, 이기종간에 메시지 교환을 위해 메시지 포맷 컨버전을 위한 메시지 브릿지 를 이용하거나 (속도 저하 발생) 시스템 자체를 통일시켜야 하는 불편함과 비효율성이 있었음
    + AMQP의 목적은 서로 다른 시스템간 최대한 효율적으로 메시지를 교환하기 위한 MQ 프로토콜이다.




    # AMQP Routing Model

    + AMQP Routing Model은 아래의 3개 Component로 구성된다
    1) Exchange
    2) Queue
    3) Binding







    # Exchange 

    + Publisher로부터 수신한 메시지를 적절한 큐 또는 다른 exchange로 분배하는 라우터 기능수행
    + 각 큐나 exchange는 ‘Binding’을 사용해 exchange에 바인드 되어 있음
    + exchange는 수신한 메시지를 binding에 따라 적당한 큐나 exchange로 라우팅
    + Binding 과 메시지를 매칭시키기 위한 라우팅 알고리즘을 정의한 것을 Exchange Type이라함.
    + Exchange Type 은 라우팅 알고리즘의 클래스이다.
    + 브로커는 여러개의 Exchange Type 인스턴스를 가질 수 있다.
    + Exchange Type = 어떻게 메시지를 라우팅 시킬지 결정, binding= 이러한 방법을 통해 실제로 어떤 메시지를 어떤 큐에 보낼지를 결정하는 라우팅 테이블





    # Queue 

    + 일반적으로 알고있는 큐이다. 메모리나 디스크에 메시지를 저장하고 그것을 Consumer 에 전달하는 역할을 한다.
    + 큐는 스스로 관심있는 메시지 타입을 지정한 Binding을 통해 Exchange에 말 그대로 bind 된다.

    # Binding
    + exchange 와 큐와의 관계를 정의한 일종의 라우팅 테이블이다. 같은 큐가 여러개의 Exchange에 bind 될 수도 있고 하나의 exchange 에 여러개의 큐가 binding 될 수도 있다.

    # Routing Key
    + Publisher에서 송신한 메시지 헤더에 포함되는 것으로 일종의 가상 주소라고 보면 된다.
    + Exchange는 이것을 이용해서 어떤 큐로 메시지를 라우팅할지 결정한다.
    + AMQP의 표준 Exchange Type은 이 라우팅 키를 이용하도록 되어 있다.






    # Standard Exchange Type

    + Exchange Type은 메시지를 어떤 원칙 내지는 방법으로 라우팅할지를 결정하는 일종의 알고리즘이다.
    + AMQP 에서는 표준 Exchange Type으로 라웉이 키에 기반한 3개의 알고리즘과 key-value헤더에 기반한 1개 유형의 Exchange Type을 반드시 정의하도록 되어있다.





    # Direct Exchange




    + 메시지의 라우팅 키를 큐에 1:N으로 매칭시키는 방법
    + 가장 일반적인 경우 큐의 이름을 바인딩 하고자 하는 라우팅 키와 동일하게 작성.





    # Topic Exchange




    + 와일드카드를 이용해 메시지를 큐에 매칭시키는 방법
    + 라우팅 키는 “.”으로 구분된 0개 이상의 단어집합으로 간주
    + 와일드카드 문자를 이용해 특정 큐에 Binding 함. 
    + “*”는 하나의 단어, “#”는 0개 이상의 단어를 의미






    # Fanout Exchange





    + 모든 메시지를 모든 큐로 라우팅





    # Headers Exchange


    + key-value로 정의된 헤더에 의해 라우팅 결정
    + 큐를 바인딩할 때 x-match라는 특별한 argument로 헤더를 어떤식으로 해석하고 바인딩할지 결정
    + x-match가 All이면 바인딩 조건을 모두 충족시켜야한다는 것이고(AND), Any이면 하나만 충족시키면 된다는 것이다(OR) 
    + 위와같이 OR 인경우 1번과 3번큐로 라우팅 






    [참고]


Designed by Tistory.