Ответ
Архитектура RabbitMQ состоит из нескольких основных компонентов, которые обеспечивают надежную доставку сообщений. Процесс выглядит так: Producer отправляет сообщение в Exchange, который на основе правил (Binding) перенаправляет его в одну или несколько Queue, откуда его забирает Consumer.
Ключевые компоненты:
-
Producer (Издатель) Приложение, которое создает и отправляет сообщения. Оно не отправляет сообщения напрямую в очередь, а только в
Exchange. -
Exchange (Обменник) Получает сообщения от издателей и маршрутизирует их в очереди. Тип обменника (
direct,topic,fanout,headers) определяет логику маршрутизации. -
Queue (Очередь) Буфер для хранения сообщений, ожидающих обработки. Сообщение хранится в очереди до тех пор, пока
Consumerне заберет его. -
Consumer (Потребитель) Приложение, которое подключается к очереди, получает из нее сообщения и обрабатывает их.
-
Binding (Связь) Правило, которое связывает
ExchangeиQueue. Оно указывает обменнику, в какие очереди отправлять сообщения в зависимости от ключа маршрутизации (routing_key) или заголовков.
Простой пример отправки сообщения (Producer):
import pika
# Установка соединения
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
# Убеждаемся, что очередь существует
channel.queue_declare(queue='hello_queue')
# Отправка сообщения в обменник по умолчанию
# routing_key указывает на имя очереди
channel.basic_publish(
exchange='',
routing_key='hello_queue',
body='Hello World!'
)
print(" [x] Sent 'Hello World!'")
connection.close()