AMQP(Advanced Message Queuing Protocol)

AMQP(Advanced Message Queuing Protocol)는 메시지 지향 미들웨어를 위한 개방형 표준 응용 계층 프로토콜이다.
이 프로토콜은 클라이언트와 미들웨어 브로커 간의 데이터 교환을 위해 설계되었다.
주요 기능으로는 메시지 지향, 큐잉, 라우팅(포인트-투-포인트 및 발행-구독), 신뢰성, 보안 등을 포함한다.

AMQP는 2003년 런던의 JP모간 체이스에서 John O’Hara에 의해 시작되었다. 메시지 지향 미들웨어의 표준화를 통해 시스템 간 통신을 개선하려는 목표로 개발되었으며, 이후 오픈 소스 프로젝트로 전환되어 다양한 시스템과 플랫폼에서 사용되고 있다.

AMQP
https://www.linkedin.com/pulse/advanced-message-queuing-protocol-amqp-%CA%8Cs%C6%95raf-%CA%8C%C9%AF%C9%AFa%C8%A1-/

AMQP의 주요 특징

  1. 이기종 시스템 간 메시지 교환: 벤더에 종속되지 않는 표준화된 네트워크 프로토콜을 사용한다.
  2. 높은 속도와 응답성: 메시지 큐(MQ)를 사용하여 효율적인 메시지 교환을 지원한다.
  3. 신뢰성과 보안: 메시지의 안전한 전달을 보장한다.
  4. 유연성과 확장성: 다양한 메시징 패턴을 지원하며, 복잡한 라우팅 시나리오를 구현할 수 있다.

AMQP의 기본 구성 요소

  1. Publisher: 메시지를 생성하고 Broker에 송신한다.
  2. Broker: Subscriber에게 메시지를 전달하고 배포한다.
  3. Subscriber: Broker로부터 매칭된 메시지를 수신한다.

AMQP Routing Model

AMQP의 라우팅 모델은 다음과 같은 구성 요소로 이루어져 있다:

  1. Exchange: Publisher로부터 수신한 메시지를 바인딩하고, 여러 exchange type 인스턴스를 보유한다.
  2. Queue: 메시지를 저장하고 Subscriber에게 전달한다.
  3. Binding: Exchange와 Queue의 관계를 정의하며, 1:N, N:1 등 다양한 방식으로 바인딩할 수 있다.
  4. Routing Key: 메시지 헤더에 포함된 가상 주소로, Exchange type이 이를 이용한다.

Exchange Types

AMQP는 다양한 Exchange type을 지원하여 유연한 메시지 라우팅을 가능하게 한다:

  1. Fan-out: 모든 큐로 메시지를 라우팅한다.
  2. Direct: 라우팅 키를 큐에 1:N으로 매칭한다.
  3. Topic: 와일드카드를 이용하여 큐에 매칭한다.
  4. Headers: key-value로 정의된 헤더로 라우팅을 결정한다.

AMQP의 메시지 전송

AMQP(Advanced Message Queuing Protocol)에서 메시지 전송은 다음과 같이 이루어진다:

  1. 메시지 전송 단위:
    AMQP에서 데이터의 기본 단위는 ‘프레임(frame)‘이다.메시지는 이 프레임을 통해 전송된다.
  2. 메시지 형식:
    AMQP 메시지는 다음 구성요소로 이루어진다.
    • 헤더(Header): 메시지의 속성 및 메타데이터를 포함하며, 전달 모드, 우선순위, 만료 시간 등의 정보를 담고 있다.
    • 프로퍼티(Properties): 메시지 식별자, 생성 시간, 콘텐츠 유형 등과 같은 추가적인 속성을 정의한다.
    • 바디(Body): 실제 전송하고자 하는 데이터(payload)를 포함한다.
  3. 메시지 전송 과정:
    a. 생산자(Producer)가 메시지를 생성하여 특정 Exchange에 전달한다.
    b. Exchange는 라우팅 규칙에 따라 메시지를 적절한 Queue로 전달한다.
    c. 메시지는 프레임 단위로 분리되어 전송된다. 구체적으로 메서드 프레임, 헤더 프레임, 바디 프레임으로 나뉘어 전송된다.
    d. Queue에 저장된 메시지를 Consumer가 소비한다.
  4. 전송 보장:
    AMQP는 메시지 전달을 세 가지 방식 중 하나로 보장한다.
    • at-most-once: 메시지는 한 번만 전달되거나 전혀 전달되지 않는다.
    • at-least-once: 메시지는 최소 한 번 이상 전달되며, 여러 번 전달될 수 있다.
    • exactly-once: 메시지는 정확히 한 번만 전달된다.

AMQP의 활용

AMQP는 다양한 메시징 시스템에서 구현되어 사용되고 있다:

  1. RabbitMQ: Openstack의 메시지 큐로 사용되며, 다양한 언어와 OS를 지원한다.
  2. ActiveMQ: JVM 기반 애플리케이션에서 사용되는 자바 기반 오픈소스이다.
  3. ZeroMQ: 임베디드 네트워크 메시징에 사용되며, 단순하고 효율적인 프로토콜로 고속 전송을 지원한다.

참고 및 출처