Java Core junior
Eventual consistency — почему assertEquals сразу может упасть?
Ответ
Kafka/RabbitMQ — асинхронные. Сообщение отправлено, но ещё не обработано consumer'ом. assertEquals сразу после send → данных в БД ещё нет. Решение: Awaitility с polling, или Thread.sleep (плохо — хрупко), или callback/listener.
Разбор: Корень в асинхронности: send лишь публикует сообщение, а обработка consumer'ом и запись в БД происходят позже, поэтому немедленный assertEquals читает ещё не появившиеся данные. Решение — дождаться результата (Awaitility с polling, listener/callback), а не sleep. Дистракторы валят вину на изоляцию транзакций, кэш первого уровня или producer.flush — но даже после flush consumer всё равно не успеет обработать сообщение мгновенно.
Хочешь так же по своей компании — с вопросами по грейдам и задачами? Закажи гайд или забери свежее в Telegram.