일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- rust
- 러스트
- 파이썬
- Python
- Container
- RabbitMQ
- Network
- dockerfile
- Algorithm
- 알고리즘
- AWS
- 코어 이더리움 프로그래밍
- Refactoring
- 플랫폼
- BAEKJOON
- 전문가를 위한 파이썬
- BlockChain
- Fast API
- guru
- function
- Ethereum
- docker
- fluent python
- 동시성
- Kubernetes
- 이더리움
- IMAGE
- 블록체인
- 백준
- Thread
Archives
- Today
- Total
글쓰기 | 방명록 | 관리 |
Victoree's Blog
[1] Kombu란? RabbitMQ with Python 본문
728x90
Kombu [RabbitMQ with Python]
→ kombu
라이브러리를 기반으로 rabbitmq 큐에 원하는 (mcard 버닝이란) 테스크를 퍼블리시 하면, 큐에 mcard_burn이라는 키와 데이터, 리퀘스트 아이디가 인큐됨
Kombu란?
파이썬 메시징 라이브러리
메시지 브로커를 쉽게 사용할 수 있는 솔루션
- 다양한 메시지 브로커를 지원함
- 자동으로 인코딩과 정규화를 해줌
- 메시지 전송과 관련하여 예외처리가 잘 되어있음
- 커넥션이나 채널 오류가 있을 때에도 정상적으로 동작하도록 구현되어있음
- amqplib의 불편한점들이 수정됨
- carrot을 사용하고 있는 프로젝트를 쉽게 포팅할 수 있음
rabbitmq
에서 Exchange란?- Queue에 전송되기 전에 거쳐가는 라우터
- 어떤 방식으로 메세지를 전달하냐에 따라 type이 나뉨
- fanout
- bind된 모든 큐에 메시지를 전달
- direct
- routing_key를 설정하여 같은 routing_key를 갖은 큐에만 선택적으로 메시지를 전달
- topic
- direct type과 비슷하나 대신 routing_key에 패턴을 설정할 수 있음
- 패턴에는 * 또는 #을 사용하는데, *은 모든 단어, #은 공백을 포함한 모든 단어
- 단어의 구분은 .으로 함
- header
- key와 value를 설정하여 선택적으로 메시지를 전달
- fanout
Producer
- producer가 메시지를 publish하는 순서
- exchange 선언 → queue 선언 → producer 선언 → publish 메시지 전달
- publish할 때, declare 옵션에 따라 exchange, queue의 존재 여부를 확인하여 생성을 하거나 에러를 발생할 수 있음
- rabbitmq에 exchange, queue가 있다면 그대로 사용 가능
- 존재하는 exchange나 queue라면 바로 사용 가능하다는 뜻인듯
- 코드상에서는 exchange나 queue 명을 쓰면 바로 그 녀석을 사용할 듯아래는 koin_server에서 사용하는 큐 퍼블리셔들임
QUEUE_PUBLISHERS = { 'mcard.mint': _publisher_default_options, 'mcard.single_burn': _publisher_default_options, 'mcard.single_mint': _publisher_default_options, }
- QueueMixin을 정의함으로 인해, option값으로 기본 세팅을 맞칠 수있음 → QueueMixin을 사용함으로 인해, 큐의 기본 세팅을 할 수 있음
- Exchange
option
중 durable- True로 하면, rabbitmq 서버가 죽어서 재시작하여도 유지됨
- 디스크를 사용하냐, 메모리를 사용하냐의 차이
- Queue
- 위 durable이라는 옵션은 동일
- auto_delete
- 하나 이상의 소비자가 연결된 후에 모든 소비자가 연결이 끊어지면 큐가 삭제됨
- rabbitmq에 exchange나 queue가 없을 때에도 자동으로 만들어짐
Consumer
[Reciever]- exchange → queue → binding 정보 업데이트
channel
- 하나의 물리적인 connection 안의 논리적인 connection
- 비동기 작업을 할때 consumer(worker)를 프로세스나 쓰레드 형태로 여러개를 생성하여 작업을 처리하게 되는데, 이때 각 프로세스나 쓰레드도 물리적인 connection을 맺으면 자원 낭비 &&작업처리의 일관성도 떨어질 것
- 한 워커가 물리적 연결이 끊기면, 그 워커는 계속 에러를 발생
- 한 개의 물리적인 connection으로 여러 worker를 관리하는 것이 효율적
728x90
'Python > 3rd-Party' 카테고리의 다른 글
Redis의 동시성 프로그래밍 (0) | 2023.06.21 |
---|---|
[2] AMQP (RabbitMQ Docs 번역) (2) | 2021.06.01 |
Comments