(RabbitMQ) 알아보기
RabbitMQ
RabbitMQ란 작업 메시지를 생성하고 전달하는 producer에게 메시지를 전달받아 보관하고 있다가 적절한 worker에게 분배해주는 중간다리 역할을 하는 브로커이다. AMQP라는 프로토콜을 기반으로 만들어졌다. AMQP는 클라이언트 어플리케이션과 MIDDLEWARE 브로커와의 메시지를 주고받기 위한 프로토콜(어떤 약속이나 규칙, 규약)이다
producer
작업 메시지를 생성하고 전달하는 역할을 한다. (celery)
exchange
exchange는 producer에게 전달받은 메시지를 적절한 큐에게 발송할때 이를 결정하는 역할을 한다 producer에 의해 전달된 작업 메시지가 큐에 저장될때 직접 접근해서 전달하지 않고 exchange를 통해서 전달한다.
binding
binding은 exchange에게 메시지를 보낼 규칙을 지정하는 역할을 한다. 즉 조건에 맞는 작업 메시지를 특정한 큐에게 전송하도록 설정한다. 이때 해당 exchange 타입에 맞게 설정되어야 한다.(exchange와 queue를 연결해준다)
consumer
consumer는 메시지를 수신하는 역할을 한다. 큐에 직접 접근하여 메시지를 가져간다. (worker)
자세한 동작 흐름
producer가 작업 메시지를 생성해서 전송한다 -> exchange가 어떤 큐에게 보낼지 exchange의 binding이라는 규칙을 통해서 메시지를 큐에 전달한다 -> binding과 연결된 큐에 메시지가 복사된다. exchange는 작업메시지를 어떤 큐에게 보낼지에 대해 결정을 하는데 이때 exchange는 규칙을 결정하는 여러 타입이 있다.
Fanout
Fanout은 exchange와 binding된 즉, exchange와 연결된 큐에게 동일한 메시지를 보낸다.
Direct
Direct는 Exchange와 메시지를 보낼 큐를 직접 선택하여 binding하는데 라우팅 키를 통해서 선택한다.
Topic
topic은 마침표로 구분되는 단어들을 사용한다. 즉 라우팅키 문자열 내에 *, # 를 넣어서 binding을 제공해준다
*
: 단어 한개를 대체함
#
: 0개 이상의 단어를 대체함
headers
headers 타입은 producer에서 정의된 header의 key-value쌍과 consumer측에서 정의된 key-value 쌍과 일치하면 binding된다