Проверяет понимание архитектуры RabbitMQ и механизмов маршрутизации сообщений.
Сообщения в RabbitMQ отправляются от producer к consumer через exchange. Exchange получает сообщение и решает, в какие очереди его направить, используя тип exchange (direct, fanout, topic, headers) и routing key. Consumer подписывается на очередь и получает сообщения.
Доставка сообщений в RabbitMQ происходит в 4 этапа:
Producer публикует сообщение:
Приложение-отправитель отправляет сообщение в exchange с указанием routing key.
channel.basic_publish(
exchange='orders',
routing_key='new_order',
body='Order data'
)Exchange маршрутизирует сообщение:
Exchange определяет, в какие очереди отправить сообщение, основываясь на:
Типе exchange:
direct: Точное совпадение routing key (например, logs.error).
fanout: Всем очередям без фильтрации (broadcast).
topic: Шаблоны routing key (например, *.error).
headers: По атрибутам сообщения (редко используется).
Bindings: Связи между exchange и очередями с указанием routing key.
Сообщение попадает в очередь:
Очередь хранит сообщения до обработки. Если очередь не привязана к exchange, сообщение теряется.
Consumer обрабатывает сообщение:
Приложение-получатель подписывается на очередь и получает сообщения.
def callback(ch, method, properties, body):
print(f"Received: {body}")
channel.basic_consume(queue='orders', on_message_callback=callback)Пример workflow:
Создание exchange и очереди:
channel.exchange_declare(exchange='orders', exchange_type='direct')
channel.queue_declare(queue='order_processing')
channel.queue_bind(exchange='orders', queue='order_processing', routing_key='new_order')Вывод:
RabbitMQ гарантирует гибкую доставку через связку exchange-очередь.