포스트

Amqp에 대하여

하나의 장비에 여러 서비스를 올릴 때 어떻게 서로 통신해야할까? 굳이 인터넷을 통해 외부로 빠져나갔다가 다시 네트워크에 들어와야할까?

AMQP란?

Advanced Message Queuing Protocol

  • 메시지큐 기반의 통신 프로토콜인데 기존보다 더 좋은 것! 이다.

    AMQP 특징

  • 서로 다른 시스템들간 최대한 효율적인 방법으로 통신하기 위해 탄생하였다.
    • 메시지 지향, 큐잉, 라우팅(p2p, publish-subscribe), 신뢰성, 보안을 기능으로 갖는다. +와이어 레벨 프로토콜이다. 바이트 스트림으로 네트워크를 경유하며 송신되는 데이터 형식을 말한다. 그래서 이런 데이터 형식을 따르며 메시지를 만들고 해석할 수 있는 도구라면 구현 언어와 관계 없이 다른 호환 도구와 상호 운용이 가능하다고 한다. (출처: 위키피디아 AMQP) -> 이전에도 상용화된 MQ 제품들이 있었으나 대부분 플랫폼 종속적이어서 이기종간 메시지 교환에 있어 효율이 떨어지고 불편함이 많았다. 이런 기존의 MQ들의 약점을 보완하기 위해 등장하였다. => AMQP의 목적은 서로 다른 시스템간의 효율적 메시지 교환이다.

AMQP의 조건

  • 모든 broker들은 똑같은 방식으로 동작할 것
  • 모든 client들은 똑같은 방식으로 동작할 것
  • 네트워크상으로 전송되는 명령들의 표준화
  • 프로그래밍 언어 중립적

AMQP의 Routing 구조

Exchange

  • Publisher 로부터 받은 메시지를 적절한 큐 또는 다른 exchange로 분배하는 라우터 역할
    • 각 큐나 exchange는 Binding을 통해 exchange에 바인딩돼있다.
  • Exchange Type이라는 라우팅 알고리즘을 통해 Binding된 대로 메시지를 보낸다.
    • exchange type: 메시지 라우팅 방법을 의미
    • binding: exchange type을 통해 실제로 어떤 메시지를 어떤 큐에 보내야하는지 묶음이 정의된 라우팅 테이블

Queue

  • 메모리나 디스크에 메시지를 저장한 뒤 consumer에 전달하는 역할
  • exchange에 binding된다.

Binding

  • exchange와 queue와의 관계를 정의한 일종의 라우팅 테이블이다.
  • 큐와 exchange는 다대다 관계가 될 수 있다.
    • one queue <- many exchange
      • 여러 규칙에 의해 하나의 큐에 귀결될 수 있다.
    • many queue -> one exchange
      • 많은 큐들이 하나의 exchange로부터 라우팅 될 수 있다.

Routing Key

  • publisher가 보내는 메시지 헤더에 포함되는 가상 주소같은 것.
  • exchange는 이걸 보고 메시지를 큐로 라우팅한다.

Standard Exchange Type

  • 대부분의 MQ에서 가능한 여러 상황에 대해 AMQP에서 정의한 표준 라우팅 알고리즘이다.

Standard Exchange Type

  • 메시지를 어떻게 라우팅할지 결정하는 알고리즘
    • 라우팅 키에 기반 3개와 key-value 헤더에 기반한 1개이다.
    • AMQP에서는 표준 Exchange Type으로 총 4개 유형의 Exchange Type을 정의하도록 되어있다.

Exchange Types 종류

Direct Exchange

  • 메시지의 라우팅 키를 큐에 1:N으로 매칭하는 방법

    Topic Exchange

  • 메시지의 라우팅 키를 인식할 때 와일드카드를 이용해 동적으로 큐에 1:N으로 매칭하는 방법
  • Direct와 비슷하지만 패턴 형태로 동적 매칭을 지원한다.

    Fanout Exchange

  • 모든 메시지를 모든 큐로 전송하는 유형

    Headers Exchange

  • Key-Value로 정의된 헤더에 의해 라우팅한다.
  • x-match=(allany) 를 통해 헤더 조건을 만족하는 정도를 결정한다.
    • all: 모두 만족해야한다.
    • any: 하나만 맞아도 허용 -> 위 이미지에서는 Queue 1, 3

참고

  • https://kaizen8501.tistory.com/217
  • https://brightstarit.tistory.com/44
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.