[AMQP] AMQP(Advanced Message Queuing Protocol)

2022. 5. 24. 11:14 Spring Cloud/RabbitMQ

AMQP(Advanced Message Queuing Protocol)

AMQP는 메시지 지향 미들웨어를 위한 개방형 표준 응용 계층 프로토콜이다. 

  •  AMQP 이전 상용화된 MQ(Message Queueing)은 플랫폼 종속적인 제품들이 많아, 서로 다른 이기 존 간에 메시지를 교환하기 위해서는 메시지 포맷 변경을 위한 메시지 브릿지 이용 및 시스템 자체를 통일 시켜야 하는 불편함 존재
    • 메시지 브릿지를 이용함으로써 속도 저하 발생
  • 이를 해결하기 위해 AMQP 등장하였으며, 서로 다른 시스템간에 최대한 효율적인 방법으로 메시지를 교환하기 위한 MQ 프로토콜로 설계
    • 시스템과 벤더에 종속 되는 것을 방지 하기 위해 AMQP는 아래와 같은 조건을 충족 해야 함
      • 모든 Broker들은 똑같은 방식으로 동작 할 것
      • 모든 Client들은 똑같은 방식으로 동작 할 것
      • 네트워크 상으로 전송되는 명령어들의 표준화

AMQP Routing Model을 위한 Component

  • Exchange
    • Publisher로 부터 수신한 메시지를 적절한 Queue 또는 다른 Exchange로 분배하는 라우팅 기능 수행
    • 각 Queue나 Exchange는 'Binding'을 사용해서 상위 Exchange에 바인드 되어 있고, 상위 Exchange는 수신한 메시지를 Binding 된 Queue나 Exchange로 라우팅
    • Broker는 여러개의 exchange type 인스턴스를 가질 수 있음
      • exchange type : Binding과 메시지를 매칭 시키기 위한 라우팅 알고리즘을 정의, 메시지를 어떤 방법으로 라우팅 시킬지를 결정
  • Queue
    • 메모리나 디스크에 메시지를 저장하고, 그것을 Consumer에게 전달하는 역할을 함.
    • Queue는 스스로가 관심있는 메시지 타입을 지정한 Binding을 통해 exchange에 binding 됨
  • Routing Key
    • Publisher에서 송신한 메시지 헤더에 포함되는 일종의 가상 주소
    • Exchange는 Routing Key를 이용해서 어떤 Queue로 메시지를 Routing 할지 결정
  • Standard Exchange Type
    • 대부분 MQ(Message Queue)에서 가능한 여러가지 상황에 대해 AMQP에서 정의한 표준 라우팅 알고리즘

Standard Exchange Type

  • Direct Exchange
    • Message의 routing_key를 Queue에 1:N으로 매칭 시키는 방법
    • 가장 일반적인 경우, Queue의 이름을 Binding하고자 하는 routing_key와 동일하게 작성하는 함.
    • 아래 그림의 경우, sales_order라는 routing_key를 가진 Queue1과 Queue3에 메시지 전달

  • Topic Exchange
    • 와일드카드를 이용해 Message를 Queue에 매칭하는 방법
    • routing_key는 "."으로 구분된 0개 이상의 단어 집합으로 간주하고, 와일드 카드 문자들을 이용해서 특정 Queue에 Binding 한다.
    • 와일드 카드
      • *(start) : 하나의 단어를 의미
      • #(hash) : 0개 이상의 단어를 의미.
        • "#" 만 Binding 하면, 모든 routing_key를 수신한다는 의미로 Fanout Exchange와 동일한 동작 수행
    • 아래 그림의 경우, Queue1과 Queue3에 메시지 전달
      • Queue2의 경우, 보내는 routing_key #.stock. 다음 뭔가 다른 단어가 있을 때, 메시지가 수신 됨
        • 예를 들어 "usd.stock.test"라고 보내면 Queue1, Queue2, Queue3 모두 메시지가 수신 됨.

  • Fanout Exchange
    • 모든 메시지를 모든 Queue로 라우팅 하는 유형

  • Headers Exchange
    • Key-Value로 정의된 헤더에 의해 라우팅 결정
    • Queue를 Binding 할 때, x-match 값으로, 바인딩 조건을 모두 충족(AND) 할지, 하나만 충족 할지(OR) 결정
      • x-match="all" : 바인딩 조건 모두 충족
      • x-match="any" : 바인딩 조건 중 하나만 충족
    • 아래 그림의 경우, Queue1과 Queur3에서 메시지를 수신함

 

 

 

참고자료

https://ko.wikipedia.org/wiki/%EC%96%BC%EB%9E%AD

http://egloos.zum.com/killins/v/3025514



출처: https://kaizen8501.tistory.com/217?category=958645 [Life4IoT]