Какие знаешь типы exchange в RabbitMQ

Python Senior Без компании
Какие знаешь типы exchange в RabbitMQ
Ответы
В RabbitMQ существует несколько типов exchange, которые определяют, как сообщения будут распределяться между очередями: - **Direct** – сообщение отправляется в очередь, чей routing key точно совпадает с ключом сообщения. Пример: ``` channel.exchange_declare(exchange='direct_logs', exchange_type='direct') channel.basic_publish(exchange='direct_logs', routing_key='error', body='Error message') ``` - **Fanout** – сообщение рассылается во все связанные очереди, игнорируя routing key. Пример: ``` channel.exchange_declare(exchange='logs', exchange_type='fanout') channel.basic_publish(exchange='logs', routing_key='', body='Broadcast message') ``` - **Topic** – сообщение отправляется в очереди, чей routing key соответствует шаблону (с поддержкой wildcards `*` и `#`). Пример: ``` channel.exchange_declare(exchange='topic_logs', exchange_type='topic') channel.basic_publish(exchange='topic_logs', routing_key='system.error', body='Topic message') ``` - **Headers** – маршрутизация происходит на основе заголовков сообщения (а не routing key). Пример: ``` args = {'x-match': 'all', 'severity': 'error', 'source': 'api'} channel.exchange_declare(exchange='headers_logs', exchange_type='headers') channel.basic_publish(exchange='headers_logs', routing_key='', body='Headers message', properties=pika.BasicProperties(headers=args)) ``` Также существует **Default exchange** (пустая строка `''`), куда сообщения попадают напрямую в очередь с именем, равным routing key.