추가로 정리 중

 

AMQP Frame Structure

AMQP Spec에서는 객체 지향 개념과 유사하게 Class와 Method라는 것을 사용하여 AMQP Command를 정의한다.

  • Class는 기능의 범위를 정의한다.
  • Method는 각 Class 내부에서 서로 다른 작업을 수행하는 작업 단위이다.
// example) Connection.Start
{class}.{method}

basic class : (메시지의 송신, 수신, 대기열의 접근, 클라이언트의 종료, 시작, 거부 등)

channel class : (채널 생성, 종료, 중지)

exchange class : (분기 설정, 생성, 삭제, 연결 등) 

queue class : (메시지 큐 생성, 삭제, 설정, 해제 등)

tx class : (트랜잭션 커밋, 롤백, 모드 설정 등)

 

 

 

AMQP Component

AMQP Spec에서 명령을 전송하거나 수신할 때 필요한 모든 인자들은 캡슐화되어 있는 Frame으로 Encoding 되어 전송된다.

  • Frame은 각각의 명령과 인자를 Encoding하여 각각 구분되어 관리하는 하나의 단위이다.
    • 이를 통해 여러가지 요청을 효율적으로 구분한다.
  • Frame의 기본 크기는 131KB이며 연결 과정 중에 32비트로 표현할 수 있는 범위 내에서 최대 크기를 서버와 협상한다.

 

저수준의 AMQP 프레임은 다섯 개의 별개 구성 요소를 지닌다.

  • Frame Type : 1Byte
  • Channel Number
  • Frame Size : size → Byte
  • Frame Payload
  • end byte marker : ASCII 206
  Frame Header  ||               Frame Payload              ||  
[ 1 ][ 0 ][ 335 ][ Frame Payload : Type 별로 Data가 다르다. ][ 0xce ]

Frame Payload는 각각의 Frame 간에 운반하는 내용을 무결성 있게 보호하도록 감싸게 설계되었다.

 

 

 

AMQP Frame Types

 

Protocol Header Frame

  • RabbitMQ Connection을 연결할 때 한 번만 사용되는 Frame
  • Client Library를 사용할 때 추상화되어 있는 Frame

 

Method Frame

  • RabbitMQ와 서로 주고받는 RPC 요청과 응답을 전달하는 Frame
  • Exchange, Routing key를 포함하여 전송한다.
  • data size를 최소화하기 위해 이진 데이터로 구성한다.

 

Content Header Frame

  • Message Size와 Message Property를 포함하는 Frame.
  • data size를 최소화하기 위해 이진 데이터로 구성한다.

 

Body Frame

  • Message Content를 포함하는 Frame
  • AMQP Spec에서는 Max Frame size가 지정되어 있으며, 이 크기를 초과하면 Body Frame을 여러 단위로 분할시킨다.
  • JPEG, JSON, XML, Text, Binary 형식으로 직렬 화한 데이터를 전송 가능하다.

 

Heartbeat Frame

  • Client와 Server가 주고받으며 서로 사용 가능한 상태인지 파악하는 것
  • RabbitMQ는 Client에게 해당 Frame을 보내며, 응답하지 않는 경우 연결을 끊는다.
    • 단일 쓰레드, 비동기 환경에서는 제한 시간을 약간 큰 값으로 늘린다.
    • 하트비트가 동작하기 어려운 상황의 경우 0으로 설정하여 disable 한다.
  • Client Library를 사용할 때 추상화되어 있는 Frame

 

 

RabbitMQ Message publishing

RabbitMQ에서 Message를 Publishing 할 때에는 Method, Header, Body Frame을 사용한다.

 

 

Publishing flow

  1. Method Frame
  2. Content Header Frame
  3. 1개 이상의 Body Frame

 

 

참고 자료

+ Recent posts