Ответ
RabbitMQ — это популярный брокер сообщений с открытым исходным кодом, который реализует протокол AMQP (Advanced Message Queuing Protocol). Он используется для построения распределенных и отказоустойчивых систем, позволяя различным сервисам асинхронно обмениваться данными.
Основные компоненты
- Producer (Издатель): Приложение, которое отправляет (публикует) сообщения.
- Exchange (Обменник): Получает сообщения от издателей и маршрутизирует их в одну или несколько очередей. Тип обменника (
direct,topic,fanout,headers) определяет логику маршрутизации. - Queue (Очередь): Буфер, который хранит сообщения до тех пор, пока они не будут обработаны потребителем.
- Consumer (Потребитель): Приложение, которое подписывается на очередь, получает и обрабатывает сообщения.
Пример использования (Python с библиотекой pika)
1. Producer (отправитель сообщения)
Этот скрипт подключается к RabbitMQ, создает очередь hello и отправляет в нее сообщение.
# producer.py
import pika
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
channel.queue_declare(queue='hello')
channel.basic_publish(exchange='',
routing_key='hello',
body='Hello, World!')
print(" [x] Sent 'Hello, World!'")
connection.close()
2. Consumer (получатель сообщения)
Этот скрипт подписывается на очередь hello и обрабатывает поступающие сообщения.
# consumer.py
import pika
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
channel.queue_declare(queue='hello')
def callback(ch, method, properties, body):
print(f" [x] Received {body.decode()}")
channel.basic_consume(queue='hello',
on_message_callback=callback,
auto_ack=True)
print(' [*] Waiting for messages. To exit press CTRL+C')
channel.start_consuming()
RabbitMQ широко применяется в микросервисных архитектурах для организации взаимодействия между сервисами, а также для выполнения отложенных и фоновых задач.
Ответ 18+ 🔞
Смотри, ну вот RabbitMQ, блядь, это такая штука, которая сообщениями торгует, как базарная тётка, только код у неё открытый, нахуй. По сути, это почтальон между твоими сервисами, чтобы они не общались в лоб, как дебилы, а через очередь, культурно.
Из чего эта хрень собрана
- Producer (Издатель): Это тот, кто начинает базар. Приложение, которое кричит: "Эй, у меня тут сообщение есть, на, забери кто-нибудь!"
- Exchange (Обменник): Центральный распределительный щит, ёпта. Получает крики от издателя и решает, в какую именно очередь их пихнуть. У него есть типы —
direct,topic,fanout,headers— от этого зависит, куда полетит сообщение. Как начальник почты, только не пьёт. - Queue (Очередь): Ну, собственно, очередь, блядь. Конвейерная лента или ящик, где сообщения ждут, пока их не заберут. Стоят, терпят, как в МФЦ.
- Consumer (Потребитель): Тот, кто в конце концов приходит и забирает это сообщение из очереди, чтобы что-то с ним сделать. Рабочая лошадка системы.
Пример на питоне, с библиотекой pika (не путать с пи*кой)
1. Producer (тот, кто отправляет)
Вот этот скрипт подключается к кролику на локалхосте, создаёт очередь с названием hello и шлёт туда своё "Hello, World!", как будто это гениально.
# producer.py
import pika
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
channel.queue_declare(queue='hello')
channel.basic_publish(exchange='',
routing_key='hello',
body='Hello, World!')
print(" [x] Sent 'Hello, World!'")
connection.close()
2. Consumer (тот, кто получает и офигевает)
А этот — подписывается на ту же очередь и сидит, как сыч, ждёт, когда ему что-то прилетит. Как только прилетает — печатает, довольный.
# consumer.py
import pika
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
channel.queue_declare(queue='hello')
def callback(ch, method, properties, body):
print(f" [x] Received {body.decode()}")
channel.basic_consume(queue='hello',
on_message_callback=callback,
auto_ack=True)
print(' [*] Waiting for messages. To exit press CTRL+C')
channel.start_consuming()
В общем, RabbitMQ — это овердохуища полезная вещь, когда у тебя микросервисы разбежались, как тараканы, и им нужно как-то общаться, не засирая друг другу логику. Или когда задачи нужно выполнять не сразу, а когда-нибудь потом, в фоне, чтобы пользователь не ждал, блядь, вечность.