RabbitMQ는 AMQP(Advanced Message Queuing Protocol)를 구현한 메세지 브로커입니다.
💡 AMQP란?
AMQP는 Advanced Message Queuing Protocol의 약자로 이름 그대로 알 수 있듯이 메세지 큐(Message Queue, MQ) 프로토콜입니다. 메세지 기반 송수신을 위한 표준 프로토콜 중 하나로, 대표적으로 AMQP, MQTT, CoAP, STOMP 등이 있고 AMQP는 이 중 메세지 지향 미들웨어(Message Oriented Middleware, MOM)들을 위한 프로토콜입니다.
AMQP가 MOM을 위한 프로토콜이고, RabbitMQ가 이를 구현하고 있다는 것은 RabbitMQ 역시 MOM의 일종이라는 뜻입니다.
그럼 RabbitMQ를 비롯한 MOM들의 사용 이점은 무엇이 있을까요?

출처: https://www.cloudamqp.com/img/blog/exchanges-topic-fanout-direct.png
RabbitMQ의 구성 요소로는 Producer, Consumer, Exchange, Binding, Queue가 있습니다. 하나씩 알아봅시다.
ProducerExchange에게 pubish 합니다. 여기서 눈여겨보아야 할 점이 메세지를 바로 Queue에 넣는 것이 아니라 Exchange에게 pubish 한다는 점입니다.ConsumerQueue에서 메세지를 받아 처리하는 역할을 합니다.ExchangeProducer가 publish한 메세지를 적절한 Queue에 라우팅하는 역할을 합니다. 4가지 타입(Direct, Topic, Headers, Fanout)이 있습니다.BindingExchange와 Queue를 있는 통로 역할을 합니다. Exchange의 타입과 Binding 규칙에 의해 메세지가 적절한 Queue로 전달됩니다.QueueConsumer들이 Queue로 부터 메세지들을 읽어들입니다.order.#이고 큐 B의 바인딩 규칙은 order.product.* 라고 한다면, 키가 order.example의 경우에는 큐 A에만 할당이 되고, order.product.example의 경우에는 두 큐에 모두 할당 됩니다. #은 0개 혹은 여러 단어를 대체하고, *은 정확히 하나의 단어만 대체합니다.x-match 속성을 사용해서 AND나 OR 조건을 설정하여 사용합니다. "x-match": "all"의 경우 모든 조건을 만족해야(AND) 큐에 전달하고 "x-match": "any"의 경우 하나만 만족해도(OR) 큐로 전달합니다.'{"type":"pdf", "format":"A4", "x-match":"all"}' 속성을 이와 같이 전달하면 type이 pdf이면서 format이 A4일 경우에만 큐에 전달하지만, '{"type":"pdf", "format":"A4", "x-match":"all"}'의 경우에는 type이 pdf거나 format이 A4거나 둘 중 하나만 만족해도 큐에 전달합니다.