티스토리 뷰
추가로 정리 중
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
'Programming' 카테고리의 다른 글
Monitoring : 프로메테우스를 이용하여 프로젝트 매트릭 수집하기 (0) | 2021.09.07 |
---|---|
RabbitMQ Message Queue 및 Message 보존 설정과 Fair Dispatch (0) | 2021.08.21 |
ZGC (4) | 2021.06.16 |
Spring AOP와 요청 인터셉트 개념 (0) | 2021.05.13 |
주니어 개발자의 Java, Spring 자료 정리 For Github (1) | 2021.04.29 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Global Cache
- Switch
- spring AOP
- URN
- configuration
- HTTP
- hypermedia
- cglib
- spring
- Data Locality
- URI
- 게으른 개발자 컨퍼런스
- RESTful
- java
- 게으른개발자컨퍼런스
- Url
- JPA
- Local Cache
- RPC
- AMQP
- JVM
- 소비자 관점의 api 설계 패턴과 사례 훑어보기
- JDK Dynamic Proxy
- lambda
- 근황
- Cache Design
- THP
- rabbitmq
- Distributed Cache
- mybatis
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함