Сравнение WebFlux Spring5 с WebMvc

задняя часть MVC Flux maven

Создайте проект SpringBoot

пройти черезSpring InitializrСоздать проекты

  1. первый шаг
    Spring Initializr.png
  2. Затем нажмите «Создать проект», чтобы сгенерировать проект и загрузить его.
  3. Разархивируйте загруженный проект, затем откройте IDEA->File->Open, чтобы выбрать pom проекта для открытия.
    路径.png
  4. Таким образом успешно собирается простейший проект SpringBoot.

Создайте проект SpringBoot с помощью команд Maven.

  1. Настройте системный путь Maven.
    image.png
  2. затем используйте команду
mvn archetype:generate  -DinteractiveMode=false -DgroupId=cn.koali -DartifactId=springboot_demo -Dversion=1.0.0-SNAPSHOT

Обратитесь к значению каждого параметраОфициальный сайт 3.

image.png
Создание прошло успешно, и будет предложен адрес, сгенерированный проектом.
4. Затем используйте IDEA, чтобы таким же образом открыть только что созданный проект из командной строки. 5. Далее открытьПростое руководство по SpringBoot
image.png
Найдите сборку с зависимостями копирования maven и т. д.

Создайте проект SpringBoot через IDEA.

  1. Откройте IDEA, затем File->new Project.
    image.png
    Заполните соответствующую Группу, Артефакт, а затем выберите необходимые зависимости.

Web Flux с использованием Spring 5.0

Что такое веб-флюс?

  1. Spring WebFlux является асинхронным, неблокирующим.
  2. WebFlux имеет два типа коллекции, моно и флюс.
  3. Mono — это 0-> 1 типы коллекций, например Mono.
  4. Flux — это тип коллекции 1->n, такой как Flux
  5. Mono и Flux обрабатываются асинхронно, в то время как объекты коллекции в основном синхронны.

В чем разница между Web Flux (Netty) и Web MVC (Servlet)?

  1. Webflux поддерживает лямбда-выражения Java8.
  2. Web MVC - это синхронная модель блокировки IO, а веб-флюс представляет собой асинхронную модель безблокирующей IO.

Web Flux (Netty) с Web MVC (Servlet) преимущества и недостатки?

  1. Эффективность (qps) Web Flux выше, чем у Web MVC.
  2. Сложность программирования Web Flux высока, затраты на обслуживание высоки, писать для аспектов непросто и т. д.

Практика веб-флюса

@Configuration
public class RouterFunctionConfiguration {
    @Bean
    public RouterFunction<ServerResponse> webFlux() {
        return RouterFunctions.route(RequestPredicates.GET("/webFlux"), request -> {
            Mono<String> str = Mono.just("Hello World").delayElement(Duration.ofMillis(10));
            return ServerResponse.ok().body(str, String.class);
        });
    }
}

Аналог Web MVC. Мы объявляем наш класс маршрута как@Configuration, а затем инициализируйте bean-компонент. В Web Flux интерфейс запроса — RequestServer, а интерфейс ответа — ResponseServer. RouterFunction предоставляет маршрут, и мы устанавливаем RequestPredicates в методе маршрута. Поведение маршрутизации, чтобы добиться принятия запроса.

Проверьте веб-флюс и какой веб-MVC высокая эффективность

  1. Сначала напишите два API, одно использованиеWeb Flux, используетсяWeb MVC, затем блокируется на 10 секунд, делая вид, что пользователь думал 10 секунд.
//web mvc
    @GetMapping("/webServlet")
    public String webServlet(){
        try {
            TimeUnit.MILLISECONDS.sleep(10);
        } catch (InterruptedException e) {
            return "Error during thread sleep";
        }
        return "Hello World";
    }
//web flux
@Bean
    public RouterFunction<ServerResponse> webFlux() {
        return RouterFunctions.route(RequestPredicates.GET("/webFlux"), request -> {
            Mono<String> str = Mono.just("Hello World").delayElement(Duration.ofMillis(10));
            return ServerResponse.ok().body(str, String.class);
        });
    }
  1. Затем откройте Jmeter
    image.png
    Предположим, есть 1000 пользователей, и запрос инициируется 10 раз в цикле.
    image.png
    JMeter заполняет запрошенный путь отдельно
    image.png
    Web flux занимает около 10 секунд, и запросы не будут отклонены.
    image.png
    web MVC занимает около 21 секунды, и большинство запросов отклоняются.