Какие основные типы обменников (exchanges) существуют в RabbitMQ?

Ответ

В RabbitMQ обменник (exchange) получает сообщения от издателей (producers) и направляет их в одну или несколько очередей (queues). Тип обменника определяет логику маршрутизации.

Существует четыре основных типа:

  1. direct

    • Принцип работы: Сообщение направляется в очереди, чей ключ привязки (binding key) в точности совпадает с ключом маршрутизации (routing key) сообщения.
    • Сценарий использования: Одноадресная рассылка (unicast), когда нужно доставить сообщение конкретному обработчику. Например, отправка задачи в очередь для определенного воркера.
  2. fanout

    • Принцип работы: Сообщение рассылается во все привязанные к нему очереди, игнорируя ключ маршрутизации.
    • Сценарий использования: Широковещательная рассылка (broadcast). Идеально подходит для массовых уведомлений, обновления кэша у всех инстансов приложения или спортивных новостей в реальном времени.
  3. topic

    • Принцип работы: Маршрутизация по шаблону. Ключ маршрутизации сообщения сравнивается с шаблоном ключа привязки. Используются подстановочные символы:
      • * (звездочка) — заменяет ровно одно слово.
      • # (решетка) — заменяет ноль или более слов.
    • Сценарий использования: Многоадресная рассылка (multicast) по подписке. Например, система логирования, где подписчики могут получать сообщения определенного уровня (*.error) или от определенного сервиса (auth.#).
  4. headers

    • Принцип работы: Маршрутизация основана на совпадении заголовков (headers) сообщения, а не ключа маршрутизации. При привязке очереди указывается, должны ли совпадать все заголовки (x-match: all) или любой из них (x-match: any).
    • Сценарий использования: Сложные сценарии маршрутизации, где возможностей ключей недостаточно.

Также существует безымянный (default) обменник, который является direct-обменником. Каждая созданная очередь автоматически привязывается к нему с ключом привязки, равным имени очереди.