Создаём Reactive RESTful Web Service на Spring WebFlux

Для начала неплохо бы понять, что такое реактивное программирование или Reactive Programming. Я прочёл кучу статей и пришёл к выводу:

Reactive Programming — это такая хипстерская и хайповая парадигма программирования, которая предполагает, что обработка данных происходит неблокирующими потоками.

Как и для Agile у нас есть манифест для реактивного программирования: https://www.reactivemanifesto.org.

Попробуем создать наш реактивный RESTful WEB Service на Spring 5. Переходим на Spring Initializr. Выбираем Maven Project, Java и Spring Boot 2. Затем в Dependencies прописываем зависимость Reactive Web.

Spring Initializr Reactive Web

Создаём обработчик HTTP-запроса:

Мы просто соединяем строки, переданные нам в параметрах str1 и str2. Тут всё просто и понятно.

Теперь нам нужно написать роутер, который будет связывать URL с нашим обработчиком:

Тут тоже всё довольно просто. Мы просто обрабатываем GET-запросы на «/concatenate» и возвращаем наш ConcatenateHandler.

Теперь напишем клиента, который будет вызывать наш сервис.

Теперь запускаем наше Spring Boot приложение ReactiveWebExampleApplication.

Потом запускаем ConcatenateWebClient и в консоли видим результат:

Итог: Мы написали пример простого приложения на Spring WebFlux. Сейчас Spring WebFlux довольно активно продвигается.

Постулаты реактивного программирования, вроде как, вполне здравые:

  • отзывчивость;
  • отказоустойчивость;
  • гибкость;
  • основанность на модели асинхронной обработки событий.

Но пока я не увидел какого-либо действительно кардинального улучшения, из-за которого бы действительно стоило бросаться переписывать свои старые сервисы со Spring MVC на Spring WebFlux. Да и вообще, есть вероятность, что это очередная волна хайпа (очень похоже на волны хайпа с Groovy, Scala и Kotlin), которая вполне может стухнуть спустя какое-то время.

Если я что-то не понял, то можете изъяснить свою точку зрения в комментариях.

Исходный код проекта на GitHub.

Пока всё. Да прибудет с вами Сила.

Один комментарий к “Создаём Reactive RESTful Web Service на Spring WebFlux”

  1. мне кажется пример будет более понятен если
    getResult вернет не String через блокировку общего потока, а непосредственно Mono на результат которого можно подписаться, ничего не блокируя.
    и тогда:
    public static void main(String[] args) {
    ConcatenateWebClient webClient = new ConcatenateWebClient();
    webClient.getResult(«Vasya», «Petya»).subscribe(
    // что-то делаем при получении результата
    System.out.println(«Результат получен!»);
    );
    System.out.println(«Ждем результат…»);
    }

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *