Сравнение WebFlux и Spring MVC

Spring

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.

Сходства и различия

image-20191231142434301
Сходства и различия

будь осторожен:

  • Поскольку Spring MVC является типом синхронной блокировки, разработчикам удобнее писать функциональный код, отлаживать тесты и т. д. Вообще говоря, если Spring MVC соответствует сценариям, старайтесь не использовать WebFlux;
  • WebFlux по умолчанию использует Netty в качестве сервера;
  • Основная база данных в основном возможна. В настоящее время уже есть проект для поддержки mysql, https://r2dbc.io/ (для использования с осторожностью, в конце концов, R2DBC также экспериментальный);

Как распространяется WebFlux

  • springmvc — через DispatcherServlet, а WebFlux — DispatcherHandler, который реализует интерфейс WebHandler:
img
webHandler
img
handle
  • ①: информация об ответе каждого HTTP-запроса, включая параметры и т. д., помещается в объект ServerWebExchange;
  • ②: Определите, пуст ли весь набор сопоставлений сопоставления интерфейсов, и если он пуст, будет создана ошибка «Не найдено»;
  • ③: Получить соответствующий обработчикMapping в соответствии с конкретным адресом запроса;
  • ④: вызов определенного бизнес-метода, который является методом интерфейса, который мы определили;
  • ⑤: Обработать возвращенный результат;