- 0) Background.. (feat. 가영매니저님)
- Middleware(?) 라는 컨셉!
- : 환경이 서로다른 시스템간, 통신을 하게 해주는 계층.
- RPC (Remote Procedure Call) : 로컬에서 원격의 `프로시져`를 실행호출 할수있도록, MW가 연결을 해주는 매커니즘.
- ORB (Object Request Broker) : 객체지향 시스템에서 서비스를 지원받을수 있도록, MW가 처리해주는 매커니즘.
- MOM (Message Oriented Middleware) : Application간 메세지를 송수신하고, 비동기적으로 통신을 처리해주는 MW 매커니즘.
- RPC Vs MOM
- "전화:우편" , "동기:비동기" , "blocking:non-blocking" , "Tightly-coupled:Loosely-coupled" , ...
- 어플리케이션이 많이 연결될수록... 복잡도의 차이가 확연히 나겠죠?
- Middleware(?) 라는 컨셉!
- 1) AMQP 란? (Advanced Message Queueing Protocol)
- 다양한 네트워크 상황에서, 어플리케이션이 메세지 송수신을 잘 할수있도록~ 표준화된 MQ 통신규격.
- (과거 JMS등 에선, 각기다른 '미들웨어' 와 '프로그램' 의 제공해야하는 행위에 표준화의 초점을 두였는데...)
- AMQP는 각기 다른 구현체가 상호 운용이 될수있고록 하는 수준으로 정의된, "와이어 레벨 프로토콜" 이다.
- Producer -> 브로커[Exchager|Binding|Queue] -> Consumer 식으로 구성이 됨.
- producer는 exchager으로 message를 publish 함.
- exchanger는 binding룰에 따라, queue에 route 함.
- queue는 exchanger에 binding 됨.
- consumer는 queue를 subscribe 함.
- 브로커가 consumer에게 배달하거나, 혹은 comsuber가 직접 가져온다.
- 1-1) Exchange
- : exchange-type 과 binding룰 기반으로, 메세지를 라우팅 함.
- Default-exchanger : ...
- Direct-exchanger : Message의 Routing-Key와 정확히 일치하는 Binding된 Queue로 라우팅.
- Fanout-exchanger : Binding 되어있는 모든 Queue에 1:N 식으로 브로드캐스트 라우팅.
- Topic-exchanger : 특정 Routing-Pattern이 일치하는 Queue로 라우팅.
- Header-exchanger : key-value로 정의된 Header 속성을 통한 라우팅.
- 주요속성
- Name, Durability(브로커 재시작시 유지여부), Auto-delete(마지막큐 해제시 자동삭제), Arguments
- 1-2) Queue
- 주요속성
- Name, Durability, Exclusive(오직 하나의 connection만, 큐삭제시 connection종료), Auto-del, Args
- 주요속성
- ...
- Message Attribute
- content-type, encoding, routing-key, delivery-mode, priority, timestamp, expire, app-id
- Message Payload
- ...
- Message Acknowledgement
- acks
- // TODO : 메세지 수신 통보 상세과정
- 2) RabbitMQ 란?
- Erlang 및 Java 로 만든 표준(ISO/IEC 19464) AMQP를 구현한 오픈소스 "메시지 브로커 시스템".
- 쉬운Cluster, 편리한ManageUI, Federation, HA, Pub/Sub, 각종 Plugin 등등의 특징.
- Vhost
- virtual-host를 통해서, 하나의 RabbitMQ 인스터스 안에 사용하고 있는 Application을 분리.
- Connection
- 물리적인 TCP 커넥션. (TLS사용 가능)
- Channel
- 하나의 물리적인 connection 내에 생성되는 가상 논리적인 connection들.
- Consumer의 process나 thread는 각자 이 channel을 통해서 queue에 연결 될 수 있다.
- Vhost
- 2-1) rabbitmq 설치
- ...
- 2-2) rabbitmq cluster 구성
- ...
- 2-3) HA 설정
- ...
- 2-4) Queue 설정
- ...
- 2-5) Flow 제어
- ...
음... 그냥 원서 봐라... ㅎ
https://www.rabbitmq.com/getstarted.html
-끝-
'MQ' 카테고리의 다른 글
Airflow + Celery (0) | 2020.09.02 |
---|---|
SQS (0) | 2020.05.16 |
Elastic Stack 란? (1) | 2020.04.12 |
flafka (flume + kafka) (0) | 2019.06.08 |
빅데이터와 하둡 (0) | 2019.05.18 |