Когда выбрать RabbitMQ
Очереди задач между сервисами: отправил — обработал — забыл. Сложная маршрутизация (по типам, приоритетам, с TTL и dead-letter), RPC-паттерны. История сообщений не нужна.
Это инструменты под разные задачи, и честный ответ часто — «вам нужен RabbitMQ». RabbitMQ — классические очереди задач с гибкой маршрутизацией. Roxa — стриминг событий: история хранится, её можно перечитать, потребители независимы.
| Roxa | RabbitMQ | |
|---|---|---|
| Модель данных | Лог/стрим: история хранится, читается заново | Очередь: сообщение доставлено — и удалено |
| Перечитывание истории | Да — любой consumer с любого offset | Нет (streams-режим — отдельная история) |
| Несколько независимых читателей | Штатно: консюмер-группы с offset'ами | Через fanout-обвязку |
| Маршрутизация | По ключу в партиции | Гибкая: exchange, routing key, TTL, приоритеты |
| Хранение | S3/MinIO или ФС, retention по размеру/времени | Диск узла, кластер зеркалирует |
| Протокол | Kafka wire | AMQP 0-9-1 |
| Рантайм | Rust, один контейнер | Erlang/OTP |
Очереди задач между сервисами: отправил — обработал — забыл. Сложная маршрутизация (по типам, приоритетам, с TTL и dead-letter), RPC-паттерны. История сообщений не нужна.
События, которые нельзя терять и полезно перечитывать: заказы, платежи, аудит, телеметрия. Несколько независимых потребителей одного потока. Новый сервис подключился — и прочитал историю с нужного места.
Отдельный случай — если у вас RabbitMQ уже используется как «типа стриминг» с ручными обвязками для повторного чтения: это ровно та боль, под которую строилась модель лога. Миграция потребует смены клиента (AMQP → Kafka), но клиенты Kafka есть для всех языков.