Programming
AMQP Frame Structure, Component, Types
Junior Lob!
2021. 8. 21. 14:32
추가로 정리 중
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
- Method Frame
- Content Header Frame
- 1개 이상의 Body Frame
참고 자료
- RabbitMQ IN Depth
- https://www.rabbitmq.com/amqp-0-9-1-quickref.html