Этот вопрос проверяет знание типов обменников (exchanges) в RabbitMQ, которые определяют, как сообщения маршрутизируются в очереди.
RabbitMQ использует обменники для получения сообщений от продюсеров и последующей их маршрутизации в очереди. Основные типы: Direct (отправляет в очередь с совпадающим ключом маршрутизации), Fanout (отправляет во все связанные очереди), Topic (отправляет в очереди, чей ключ совпадает с шаблоном) и Headers (маршрутизация на основе заголовков сообщения, а не ключа).
Обменник (Exchange) — это сущность, получающая сообщения от продюсеров и решающая, куда их направить. Привязка (Binding) связывает обменник с очередью с помощью ключа маршрутизации (routing key).
Основные типы обменников:
Direct:
Принцип работы: Сообщение отправляется в очереди, ключ привязки которых точно совпадает с ключом маршрутизации сообщения.
Использование: Точечная отправка сообщений, когда каждое сообщение предназначено для конкретной задачи (например, обработка заказов).
Fanout:
Принцип работы: Сообщение рассылается во все очереди, привязанные к данному обменнику. Ключ маршрутизации игнорируется.
Использование: Широковещательные уведомления, например, рассылка обновлений статуса всем подписчикам.
Topic:
Принцип работы: Сообщение отправляется в очереди, ключ привязки которых совпадает с шаблоном. Ключи используют символы * (заменяет одно слово) и # (заменяет ноль или несколько слов).
Использование: Сложные сценарии маршрутизации, например, подписка на уведомления по категориям (logs.error, user.registered).
Headers:
Принцип работы: Маршрутизация происходит на основе заголовков сообщения (x-match: all/any), а не ключа маршрутизации.
Использование: Более сложные критерии маршрутизации, где ключ маршрутизации неудобен.
Вывод: Выбор типа обменника зависит от логики маршрутизации сообщений в вашем приложении. Direct — для точной адресации, Fanout — для широковещания, Topic — для гибкой маршрутизации по шаблонам.