티스토리 뷰
큐와 consumer는 1 대 1! => 그래서 한 consumer가 받아보는 이벤트들은 큐에 시간순으로 정렬되어 있음이 보장된다.
mac에 설치해서 실행해보기
# 설치
brew install rabbitmq
# 포그라운드 실행
/usr/local/opt/rabbitmq/sbin/rabbitmq-server
# 백그라운드 실행
brew services start rabbitmq
localhost:15672 접속하고 초기 id/pw인 guest/guest 로 로그인하기.
라우팅
참고하기 : Part 4: RabbitMQ Exchanges, routing keys and bindings
(예시 언어는 python!)
queue - exchange 바인딩
한개의 큐는 여러개의 exchange에 바인딩 할 수 있다
A binding is a relationship between an exchange and a queue. This can be simply read as: the queue is interested in messages from this exchange.
channel.queue_bind(exchange='direct_logs',
queue='hello',
routing_key='black')
여기서 routing_key 파라미터는 basic_publish의 라우팅키랑 비교하는 값. direct, topic 타입 exchange에서만 쓰이는 값이다.
exchange 타입
direct => 라우팅 키 = 바인딩 (할때 명시한 라우팅) 키 인 큐에 메세지 전달.
# exchange 선언
channel.exchange_declare(exchange='direct_logs',
exchange_type='direct')
# publish
channel.basic_publish(exchange='direct_logs',
routing_key='black',
body=message)
topic => 라우팅 키 패턴을 보고 하나 이상의 큐에 메세지 전달 ( *, # )
라우팅 키는 여러 단어가 . 로 구분된 형식
예)
agreements.*.*.b => only match routing keys where the first word is "agreements" and the fourth word is "b"
agreements.eu.berlin.# => matches any routing keys beginning with "agreements.eu.berlin"
fanout => 라우팅키나 패턴이랑 상관없이 fanout exchange에 연결된 모든 큐에 메세지 전달
headers => 라우팅 키 대신 메세지의 headers를 가지고 특정한 규칙의 라우팅 처리.
- x-match = any 일 경우 헤더 key-value 중 하나가 binding의 key-value 중 하나와 일치하면 메시지 전달
- x-match = all 일 경우 모든 값이 일치해야 메시지를 전달한다.
channel.basic_publish(exchange= 'amq.headers',
routing_key= 'example.key',
properties= pika.BasicProperties(
headers={'ham': 'good', 'x-match':'any'},
),
body='Hello world!')
default
기본적으로는 모든 큐는 자동으로 pre-declared 된 이름 없는 exchange("") 랑 bind 되기 때문에, default exchange를 선택하면 라우팅키 랑 같은 이름의 큐로 배달된다.
# hello 큐로 배달됨
channel.basic_publish(exchange='',
routing_key='hello',
body='Hello World!')
'시리즈 > Concurrency' 카테고리의 다른 글
IPC, 프로세스간 통신 그리고 gRPC (0) | 2021.12.05 |
---|---|
서버는 여러개의 request를 어떻게 감당할까? (0) | 2021.11.29 |
EDA 메세징 시스템 - 큐 vs 로그 (0) | 2021.11.04 |
동시성 재료 살펴보기 (0) | 2021.10.27 |
Javascript 반복문 비동기 처리 ( + Event Loop, Promise ) (0) | 2021.03.23 |