Этап 9 из 10 · ≈ 8 ч

Reactive и WebFlux

Полезно знать с Middle

Реактивный стек — Reactor, неблокирующий ввод-вывод и когда он нужен.

Что важно знать

  • Реактивный стек — мало потоков, неблокирующий ввод-вывод.
  • Блокирующий вызов в реактивной цепочке останавливает event loop.
  • С виртуальными потоками преимущества WebFlux для обычных сервисов уменьшились.

Критерии освоения

Middle ≈ 8 ч

  • Объясняет Mono и Flux, backpressure и почему блокирующий вызов ломает реактивный сервис
  • Выбирает между WebFlux и MVC с виртуальными потоками

Практика. Реализовать агрегирующий эндпоинт на WebFlux, опрашивающий три сервиса параллельно, и сравнить с MVC на виртуальных потоках.

Проверка знаний

Войдите, чтобы пройти тест: сданный тест отмечает тему пройденной на карте и в ИПР.

Вопросы с собеседований

Смотреть все
Чем неблокирующая модель обработки отличается от модели «поток на запрос»?Junior

«Поток на запрос»: пока запрос ждёт базу или сеть, его поток простаивает. Неблокирующая модель: мало потоков на много соединений — ожидание не держит поток, он берёт другую работу.

Полный разбор
Метод создаёт Mono с вызовом внешнего сервиса, но не возвращает его и ни на что не подписывается. Что произойдёт?Middle

Ничего не произойдёт: Mono и Flux холодные — описывают намерение, а работа начинается при подписке. Не вернули Mono фреймворку и не подписались — вызова не будет.

Полный разбор
Что такое reactive programming и backpressure?Senior

Реактивное программирование — работа с асинхронными потоками данных через неблокирующие операторы. Backpressure — потребитель сам запрашивает столько элементов, сколько готов обработать (request(n)), и быстрый источник его не захлёстывает.

Полный разбор
Чем Spring MVC отличается от Spring WebFlux?Senior

Spring MVC — сервлетная модель «поток на запрос», блокирующий код. WebFlux — неблокирующая модель на event loop (Netty) с Reactor: малое число потоков обслуживает много соединений, но весь путь обязан быть неблокирующим.

Полный разбор
В реактивной цепочке WebFlux внутри map() выполняется синхронный JDBC-запрос. Чем это опасно?Senior

Потоков event loop — по числу ядер. Синхронный JDBC-запрос блокирует такой поток, и все соединения на нём ждут: несколько медленных запросов — и сервис стоит.

Полный разбор
Что такое Mono и Flux в Spring WebFlux?Junior

Mono — асинхронный результат из 0 или 1 элемента, Flux — поток из 0..N элементов (библиотека Project Reactor). Это описание вычисления: ничего не происходит, пока кто-то не подпишется (в WebFlux подписывается фреймворк, когда вы возвращаете Mono из…

Полный разбор
Как вызывать внешние HTTP-сервисы из Spring — RestClient и WebClient?Middle

RestClient (Spring 6.1) — современный синхронный клиент с fluent API, замена RestTemplate для блокирующих приложений. WebClient — неблокирующий клиент на Reactor, возвращает Mono и Flux; нужен в WebFlux и для параллельных вызовов. Обязательны таймауты…

Полный разбор

Разборы темы

← Вся карта «Spring»

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования