Рубрики
Без рубрики

Учебное пособие Spring WebFlux: как создать реактивное веб-приложение

Реактивные системы обеспечивают беспрецедентную скорость реагирования и масштабируемость, которые нам необходимы в наших условиях высокой производительности… Помеченный как spring, веб-разработчик, функциональный, java.

Реактивные системы обеспечивают непревзойденную скорость реагирования и масштабируемость , которые нам необходимы в нашем мире с высоким потоком данных. Однако реактивные системы нуждаются в инструментах и разработчиках, специально обученных для реализации этих уникальных программных архитектур. Spring Web Flux с Project Reactor – это платформа, специально созданная для удовлетворения реактивных потребностей современных компаний.

Сегодня мы поможем вам начать работу с Web Flux, объяснив, как он сочетается с другими инструментами реактивного стека, чем он отличается и как создать свое первое приложение.

Вот что мы рассмотрим сегодня:

  • Что такое Реактивная система?
  • Что такое проект Реактор?
  • Что такое Поток весенней паутины?
  • Характерные особенности потока пружинного полотна
  • Начните работу с Spring Web Flux
  • Следующие шаги для вашего обучения

Станьте разработчиком реактивного стека

Подберите инструменты и методы, необходимые вам для получения работы с практической практикой.

Полный Реактивный Стек: Пружинный ботинок 2 и Поток пружинного полотна

Что такое Реактивная система?

Реактивные системы – это системы, разработанные с использованием реактивного архитектурного шаблона, в котором приоритет отдается использованию слабосвязанных, гибких и масштабируемых компонентов. Они также разработаны с учетом устранения сбоев , чтобы гарантировать, что большая часть системы все еще будет работать, даже если один из них выйдет из строя.

Реактивные системы фокусируются на:

  • Реактивность : Прежде всего, реактивные системы должны быстро реагировать на любой пользовательский ввод. Сторонники реактивных систем утверждают, что реактивность помогает оптимизировать все остальные части системы – от сбора данных до взаимодействия с пользователем.

  • Устойчивость : Реактивные системы должны быть спроектированы таким образом, чтобы предвидеть системные сбои. Реактивные системы ожидают, что компоненты в конечном итоге выйдут из строя, и проектируют слабосвязанные системы, которые могут оставаться активными, даже если несколько отдельных деталей перестанут работать.

  • Эластичность : Реактивные системы должны адаптироваться к размеру рабочей нагрузки путем увеличения или уменьшения масштаба в соответствии с требованиями. Многие реактивные системы также будут использовать прогнозирующее масштабирование для прогнозирования и подготовки к внезапным изменениям. Ключом к реализации эластичности является устранение любых узких мест и создание систем, которые могут совместно использовать или копировать компоненты по мере необходимости.

  • Коммуникация, основанная на сообщениях : Все компоненты реактивной системы слабо связаны с жесткими границами между ними. Ваша система должна взаимодействовать через эти границы с явной передачей сообщений. Эти сообщения информируют различные компоненты о сбоях и помогают им делегировать рабочий процесс компонентам, которые могут с этим справиться.

Наиболее заметное различие между реактивными и другими веб-шаблонами заключается в том, что реактивные системы могут выполнять несколько разблокированных вызовов одновременно, а не заставлять одни вызовы ждать других. Таким образом, реактивные системы повышают производительность и быстродействие, поскольку каждая часть веб-приложения может выполнить свою часть быстрее, чем если бы ей пришлось ждать другой части.

Короче говоря, реактивные системы используют слабо связанные, разблокированные компоненты для повышения производительности, удобства использования и обработки ошибок.

Что такое проект Реактор?

Project Reactor – это фреймворк, построенный компанией Pivotal и работающий от Spring. Он реализует шаблоны реактивного API, в первую очередь спецификацию реактивных потоков.

Если вы знакомы с потоками Java 8 , вы быстро обнаружите много общего между потоком и потоком (или его одноэлементной версией, Mono). Основное различие между ними заключается в том, что потоки и Моно следуют шаблону издатель-подписчик и реализуют противодавление, в то время как API потока этого не делает.

Обратное давление – это способ для конечных точек передачи данных сигнализировать производителю данных о том, что он получает слишком много данных. Это обеспечивает лучшее управление потоками и распределение, поскольку предотвращает перегрузку отдельных компонентов.

Главное преимущество использования Reactor заключается в том, что вы полностью контролируете поток данных. Вы можете положиться на способность подписчика запрашивать дополнительную информацию, когда он будет готов ее обработать, или буферизировать некоторые результаты на стороне издателя, или даже использовать полный push-подход без обратного давления.

В нашем реактивном стеке он находится ниже Spring Boot 2.0 и выше WebFlux:

Стек: Технический стек – это комбинация программных продуктов и языков программирования, используемых для создания веб- или мобильного приложения. Реактивный стек тот же, но для создания реактивных приложений.

Что такое Поток весенней паутины?

Spring Web Flux – это полностью неблокирующая веб-платформа на основе аннотаций, построенная на Project Reactor, которая позволяет создавать реактивные приложения на уровне HTTP. Web Flux использует новую функцию функции маршрутизатора для применения функционального программирования к веб-уровню и обхода декларативных контроллеров и приложений запросов. Web Flux требует, чтобы вы импортировали реактор в качестве основной зависимости.

Web Flux был добавлен весной 5 в качестве реактивной альтернативы Spring MVC с добавленной поддержкой:

  • Неблокирующие потоки : параллельные потоки, которые выполняют назначенную им задачу, не дожидаясь завершения предыдущих задач.
  • API реактивного потока : Стандартизированный инструмент, включающий опции для асинхронной обработки потока с неблокирующим противодавлением.
  • Асинхронная обработка данных : Когда данные обрабатываются в фоновом режиме, и пользователь может продолжать использовать обычные функции приложения без перерыва.

В конечном счете, WebFlux отказывается от модели Spring mvc “поток за запрос” и вместо этого использует неблокирующую модель цикла с несколькими событиями для обеспечения реактивных масштабируемых приложений. Благодаря поддержке популярных серверов, таких как контейнеры Netty, Undertow и Servlet 3.1+, WebFlux стал ключевой частью реактивного стека.

Характерные особенности потока пружинного полотна

Функции маршрутизатора

Функция маршрутизатора является функциональной альтернативой @RequestMapping и @Controller стиль аннотаций, используемый в стандартном Spring MVC.

Мы можем использовать его для маршрутизации запросов к функциям обработчика:

@RestController
public class ProductController {
    @RequestMapping("/product")
    public List productListing() {
        return ps.findAll();
    }
}
@Bean
public RouterFunction productListing(ProductService ps) {
    return route().GET("/product", req -> ok().body(ps.findAll()))
      .build();
}

Вы можете использовать Функции маршрутизатора.route() для создания маршрутов вместо написания полной функции маршрутизатора. Маршруты регистрируются как компоненты Spring и поэтому могут быть созданы в любом классе конфигурации.

Функции маршрутизатора позволяют избежать потенциальных побочных эффектов, вызванных многоступенчатым процессом сопоставления запросов, и вместо этого упрощают его до прямой цепочки маршрутизатор/обработчик. Это позволяет использовать функциональные программные реализации реактивного программирования.

Сопоставление запросов и Контроллер стили аннотаций по-прежнему действительны в WebFlux, если вас больше устраивает старый стиль, Функции маршрутизатора – это просто новая опция для ваших решений.

Веб-клиент

WebClient – это реактивный веб-клиент WebFlux, созданный на основе хорошо известного RestTemplate . Это интерфейс, который представляет собой основную точку входа для веб-запросов и поддерживает как синхронные, так и асинхронные операции. Веб-клиент в основном используется для реактивной связи между бэкендом и бэкендом.

Вы можете создать и создать экземпляр WebClient, импортировав стандартные зависимости веб-потока с помощью Maven:


    org.springframework.boot
    spring-boot-starter-webflux

WebClient client = WebClient.create();

API реактивного пара

API реактивного потока – это импортированный набор функций, которые обеспечивают более интеллектуальный поток потоковых данных. Он имеет встроенную поддержку обратного давления и асинхронной обработки, что гарантирует, что приложение максимально эффективно использует ресурсы компьютера и компонентов.

В API реактивного потока есть четыре основных интерфейса:

  • Издатель : Отправляет события связанным Подписчики на основе их требований. Действует как центральная связующая точка, с помощью которой подписчики могут следить за событиями.
  • Подписчик : Получает и обрабатывает события, отправленные Издателем . Множественный Подписчики могут ссылаться на одного Издателя и по-разному реагировать на одно и то же событие. Подписчики могут быть настроены на реагирование:

    • На следующем , когда он получит следующее событие.
    • отказаться от подписки , при добавлении нового подписчика
    • onError Ошибка//, при возникновении ошибки с другим абонентом
    • неполный , когда другой подписчик завершит свою задачу
  • Подписка : Определяет связь между выбранными Издатель и Подписчик . Каждый Подписчик может быть связан только с одним Издателем .

  • Процессор : Представляет стадию обработки Подписчика

Серверы

Web Flux поддерживается в контейнерах Tomcat, Jetty, Servlet 3.1+, а также в средах выполнения, отличных от сервлетов, таких как Netty и Undertow. Netty чаще всего используется для асинхронных и неблокирующих конструкций , поэтому WebFlux будет использовать это по умолчанию. Вы можете легко переключаться между этими параметрами сервера, просто изменив программное обеспечение для сборки Maven или Gradle.

Это делает WebFlux очень универсальным в том, с какими технологиями он может работать, и позволяет легко внедрять его в существующую инфраструктуру.

Модель параллелизма

Web Flux построен с учетом неблокирующего и, следовательно, использует модель параллельного программирования, отличную от Spring MVC.

Spring MVC предполагает, что потоки будут заблокированы, и использует большой пул потоков для продолжения движения во время случаев блокировки. Этот больший пул потоков делает MVC более ресурсоемким, поскольку компьютерное оборудование должно поддерживать большее количество потоков одновременно.

Вместо этого Web Flux использует небольшой пул потоков , поскольку предполагает, что вам никогда не придется отказываться от работы, чтобы избежать блокировки. Эти потоки, называемые работники цикла событий , имеют фиксированное количество и обрабатывают входящие запросы быстрее, чем потоки MVC. Это означает, что WebFlux использует компьютерные ресурсы более эффективно, поскольку активные потоки всегда работают.

Безопасность весеннего веб-потока

Web Flux использует Spring Security для реализации протоколов аутентификации и авторизации . Spring Security использует Веб-фильтр для проверки запросов на соответствие списку пользователей, прошедших проверку подлинности, или его можно настроить для автоматического отклонения запросов, соответствующих таким критериям, как происхождение или тип запроса.

@EnableWebFluxSecurity
public class HelloWebFluxSecurityConfig {
    @Bean
    public MapReactiveUserDetailsService userDetailsService() {
        UserDetails user = User.withDefaultPasswordEncoder()
            .username("user")
            .password("user")
            .roles("USER")
            .build();
        return new MapReactiveUserDetailsService(user);
    }
}

Это минимальная реализация, которая устанавливает все настройки по умолчанию. Здесь мы видим, что у пользователя есть имя пользователя , пароль и один или несколько ролей тегов , которые предоставляют им определенный уровень доступа.

Продолжайте изучать Weblux.

Научитесь создавать спокойные, реактивные веб-сервисы в два раза быстрее. Образовательные практические курсы с живыми средами программирования позволяют им тратить меньше времени на настройку и больше времени на практику.

Полный Реактивный Стек: Пружинный ботинок 2 и Поток пружинного полотна

Начните работу с Spring Web Flux

Теперь давайте перейдем к практическим занятиям с Weblux. Во-первых, нам нужно будет создать проект.

Мы будем использовать Spring Initializr для создания сборки Maven с зависимостью Spring Reactive Web .

Это приведет к созданию pom.xml файл, который выглядит как:



    4.0.0
    
        org.springframework.boot
        spring-boot-starter-parent
        2.4.2
         
    
    com.example
    reactive-rest-service
    0.0.1-SNAPSHOT
    reactive-rest-service
    Demo project for Spring Boot
    
        1.8
    
    
        
            org.springframework.boot
            spring-boot-starter-webflux
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
        
            io.projectreactor
            reactor-test
            test
        
    
    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    

Теперь у вас есть все необходимое для продолжения! Отсюда мы добавим некоторые компоненты для создания приложения Hello-World . Мы просто добавим маршрутизатор и обработчик, которые являются минимальными требованиями для создания нашего базового приложения Web Flux.

Маршрутизатор

Во-первых, мы создадим пример маршрутизатора, чтобы показать наш текст один раз по URL http://localhost:8080/example . Это определяет, как пользователь может запрашивать данные, которые мы определим в нашем обработчике.

@Configuration
public class ExampleRouter {
  @Bean
  public RouterFunction routeExample (ExampleHandler exampleHandler) {
    return RouterFunctions
        .route(RequestPredicates.GET("/example").and(RequestPredicates.accept(MediaType.TEXT_PLAIN)), exampleHandler::hello);
  }
}

Обработчик

Теперь мы добавим обработчик, который прослушивает любого пользователя, запрашивающего пример / маршрут. Как только маршрутизатор распознает, что запрошенный путь совпадает, он отправляет пользователя обработчику. Наш обработчик получает сообщение и переводит пользователя на страницу с нашим приветствием.

@Component
public class ExampleHandler {
  public Mono hello(ServerRequest request) {
    return ServerResponse.ok().contentType(MediaType.TEXT_PLAIN)
         .body(BodyInserters.fromObject("Hello, Spring WebFlux Example!"));
  }
}

Запустите приложение

Теперь мы запустим наше приложение, выполнив цель Maven spring-boot:выполнить . Теперь вы сможете посетить http://localhost:8080/example в вашем браузере, чтобы найти:

Hello, Spring WebFlux Example!

Следующие шаги для вашего обучения

Теперь, когда вы закончили свое первое базовое приложение, вы готовы перейти к более продвинутым темам и приложениям. Некоторые следующие концепции для изучения::

  • Реактивные Контроллеры
  • Слой хранилища
  • Угловой с потоком полотна
  • MongoDB и веб-поток
  • Классические и функциональные конечные точки

Новый курс образования Полный реактивный стек: Пружинный ботинок 2 и Поток пружинного полотна охватывает каждую из этих тем, чтобы вывести ваше обучение Spring WebFlux на новый уровень. Благодаря живым средам кодирования этот курс позволяет вам пропустить настройку проекта и управление зависимостями и сразу приступить к обучению с помощью практических проектов.

К концу вы будете знать, как создавать приложения, используя все программное обеспечение, обычно используемое в реактивном стеке.

Счастливого обучения!

Продолжайте читать о Spring и веб-приложении развитие

Оригинал: “https://dev.to/educative/spring-webflux-tutorial-how-to-build-a-reactive-web-app-5akn”