Какие популярные брокеры очереди сообщений вы знаете
Что проверяют
Для тестировщика это вопрос не про устройство брокера, а про то, умеете ли вы тестировать асинхронное взаимодействие. Следом обычно спрашивают, как проверить, что сервис отправил сообщение, и что будет, если консьюмер упал.
Как отвечать
Сначала коротко назовите брокеры и их модель:
- Apache Kafka: лог событий, сообщения хранятся заданное время и читаются повторно, порядок гарантирован внутри партиции;
- RabbitMQ: очереди с маршрутизацией через exchange, сообщение удаляется после подтверждения, неудачные уходят в dead letter queue;
- облачные и лёгкие: Amazon SQS, Yandex Message Queue, NATS, Redis Streams; ActiveMQ встречается в старых Java-системах.
Дальше главное: чем вы их проверяли.
- веб-интерфейсы: RabbitMQ Management (по умолчанию порт 15672), Kafka UI или AKHQ для Kafka. Там видно топики, партиции, отставание консьюмеров и содержимое сообщений;
- консоль:
kcatилиkafka-console-producer.shиkafka-console-consumer.sh, чтобы руками отправить или прочитать сообщение; - автотесты: брокер поднимается в Testcontainers, а асинхронный результат ждут по условию, через Awaitility в Java или повтор с таймаутом в pytest, а не через
sleep(5).
Что проверяется в сценариях: сообщение соответствует контракту (схема JSON или Avro в Schema Registry); повторная доставка того же сообщения не создаёт дубль, то есть обработчик идемпотентен; битое сообщение уходит в DLQ и не блокирует очередь; после падения консьюмера сообщения не теряются и дочитываются после рестарта; порядок событий по одному ключу сохраняется, если бизнес на него рассчитывает.
Где спотыкаются
Перечисляют брокеры с плюсами из статьи, но не могут сказать, как отправить тестовое сообщение или посмотреть содержимое очереди.
Проверяют только «счастливый путь»: отправили, получили. Дубли, порядок, отставание и DLQ остаются без тестов, а на проде ломается именно это.
Ждут результата фиксированной паузой. Тест то падает на медленном стенде, то впустую тратит время; нужно ожидание по условию с верхней границей.