Ответ
Exchange (обменник) в RabbitMQ — это ключевой компонент, который принимает сообщения от продюсеров и маршрутизирует их в одну или несколько очередей на основе заданных правил. Он действует как почтовый сортировщик, отделяя логику отправки сообщений от логики их доставки в конкретные очереди.
Почему используются Exchange? Exchange обеспечивает декаплинг (слабую связанность) между продюсерами и очередями. Продюсеру не нужно знать, в какую очередь попадет сообщение; он отправляет его в Exchange, который затем, согласно своему типу и правилам binding'а (привязки), распределяет сообщение.
Основные типы Exchange:
- Direct: Маршрутизирует сообщения в очереди,
binding key
которых точно совпадает сrouting key
сообщения. - Fanout: Отправляет копию сообщения во все очереди, которые к нему привязаны (broadcast).
routing key
игнорируется. - Topic: Маршрутизирует сообщения на основе шаблонов в
routing key
. Например,*.log
илиsystem.#
. - Headers: Маршрутизирует сообщения на основе заголовков сообщения, а не
routing key
.
Пример объявления Exchange и привязки в Python (библиотека pika
):
import pika
# Установление соединения с RabbitMQ
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
# Объявление direct exchange с именем 'my_direct_exchange'
channel.exchange_declare(
exchange='my_direct_exchange',
exchange_type='direct',
durable=True # Exchange будет существовать после перезапуска RabbitMQ
)
# Объявление очереди и привязка ее к exchange
channel.queue_declare(queue='my_queue', durable=True)
channel.queue_bind(
exchange='my_direct_exchange',
queue='my_queue',
routing_key='info' # Сообщения с routing_key='info' попадут в 'my_queue'
)
# Отправка сообщения через exchange
channel.basic_publish(
exchange='my_direct_exchange',
routing_key='info',
body='Hello, RabbitMQ!'
)
# Закрытие соединения
connection.close()
Ключевые особенности:
- Exchange не хранит сообщения; он лишь перенаправляет их.
- Сообщения могут быть отправлены в несколько очередей или отброшены, если нет подходящих привязок.
- Поведение Exchange определяется его типом и binding-правилами (связями с очередями).