Sobes.tech
Back to questions
Junior — Middle
54

Можешь ли ты перечислить и описать различные типы обменов, используемые в RabbitMQ?

Companies where asked
Леста

Answer from AI

sobes.tech AI

В RabbitMQ существуют несколько типов обменников (exchanges), которые определяют, как сообщения маршрутизируются к очередям:

  1. Direct Exchange

    • Маршрутизирует сообщения в очередь, где ключ маршрутизации (routing key) точно совпадает с ключом, заданным при привязке очереди.
    • Используется для точечной доставки сообщений.
  2. Fanout Exchange

    • Рассылает все полученные сообщения во все очереди, привязанные к этому обменнику, игнорируя ключ маршрутизации.
    • Подходит для широковещательной рассылки.
  3. Topic Exchange

    • Маршрутизирует сообщения в очереди на основе шаблонов ключей маршрутизации с использованием подстановочных символов:
      • * — соответствует одному слову
      • # — соответствует нулю или более словам
    • Позволяет гибко фильтровать сообщения по темам.
  4. Headers Exchange

    • Маршрутизирует сообщения на основе заголовков (headers) сообщений, а не ключа маршрутизации.
    • Позволяет использовать сложные правила фильтрации по набору заголовков.

Пример использования direct exchange в Python с библиотекой pika:

import pika

connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()

channel.exchange_declare(exchange='direct_logs', exchange_type='direct')

severity = 'error'
message = 'Error log message'

channel.basic_publish(exchange='direct_logs', routing_key=severity, body=message)

connection.close()

Каждый тип обменника подходит для разных сценариев маршрутизации сообщений.