Spring WebFlux и Spring MVC
Что такое вебфлукс
- ЯвляетсяАсинхронный неблокирующий веб-фреймворк, он может в полной мере использовать аппаратные ресурсы многоядерного процессора для обработки большого количества одновременных запросов.
- Преимущества: Внутри используется реактивное программирование, основанное на библиотеке Reactor, основанное на асинхронности и управлении событиями, что позволяет повысить пропускную способность и масштабируемость системы без расширения аппаратных ресурсов.
- Это не может сократить время отклика интерфейса, это может только улучшить пропускную способность и масштабируемость..
Сценарии применения
- Особенно подходит для сервисов с интенсивным вводом-выводом, таких как шлюз микросервисов.
- PS: Интенсивный ввод-вывод включает:Интенсивный дисковый ввод-вывод, Интенсивный сетевой ввод-вывод, шлюз микросервисов интенсивно использует сетевой ввод-вывод, а использование асинхронной неблокирующей модели программирования может значительно повысить пропускную способность шлюза при переадресации нисходящих сервисов.
Выберите WebFlux или Spring MVC.
WebFlux не является альтернативой Spring MVC!Хотя WebFlux также может быть запущен в контейнере сервлетов (это должен быть контейнер сервлетов 3.1+), но WebFlux в основном используется в модели асинхронного неблокирующего программирования, тогда как Spring MVC является синхронной блокировкой, если вы в настоящее время используете Spring. Много фреймворков MVC Используйте асинхронное решение, тогда WebFlux — это то, что вам нужно, в противном случае использование Spring MVC — ваш первый выбор.
В микросервисной архитектуре Spring MVC и WebFlux могут быть смешаны, как уже упоминалось, для тех служб с интенсивным вводом-выводом (таких как шлюзы), для достижения которых мы можем использовать WebFlux.
Сходства и различия
будь осторожен:
- Поскольку Spring MVC является типом синхронной блокировки, разработчикам удобнее писать функциональный код, отлаживать тесты и т. д. Вообще говоря, если Spring MVC соответствует сценариям, старайтесь не использовать WebFlux;
- WebFlux по умолчанию использует Netty в качестве сервера;
- Основная база данных в основном возможна. В настоящее время уже есть проект для поддержки mysql, https://r2dbc.io/ (для использования с осторожностью, в конце концов, R2DBC также экспериментальный);
Как распространяется WebFlux
- springmvc — через DispatcherServlet, а WebFlux — DispatcherHandler, который реализует интерфейс WebHandler:
- ①: информация об ответе каждого HTTP-запроса, включая параметры и т. д., помещается в объект ServerWebExchange;
- ②: Определите, пуст ли весь набор сопоставлений сопоставления интерфейсов, и если он пуст, будет создана ошибка «Не найдено»;
- ③: Получить соответствующий обработчикMapping в соответствии с конкретным адресом запроса;
- ④: вызов определенного бизнес-метода, который является методом интерфейса, который мы определили;
- ⑤: Обработать возвращенный результат;