0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Реактивное программирование со Spring Boot 2. Часть 2

Информационный портал по безопасности

Реактивное программирование со Spring Boot 2. Часть 2

В первой части мы узнали, что такое реактивность и как с ней работать на базовом уровне. Если вы хотите продолжить изучение реактивного программирования с новым фреймворком от Spring, то добро пожаловать!

18 декабря. Он нам сильно облегчит работу и сэкономит много времени.

  • Gradle.Будет использован в качестве системы сборки.
  • Java 8. Да, это не последняя версия на данный момент, но для наших целей вполне подойдет.
  • Lombok. Поможет сократить код.
  • Все настройки и финальный проект можно посмотреть на github.

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

    Итак, у нас все готово. Для начала создадим пользователя нашего приложения:

    Напоминаю, что для успешной компиляции и работы в IntelliJ Idea необходимо выставить галочку в пункте enable annotation processing либо написать самостоятельно все сеттеры, гетеры и конструкторы.

    Далее создадим репозиторий с нашими пользователями:

    Здесь следует заметить, что мы наследуемся от особого интерфейса для работы в реактивном режиме. Если заглянуть в интерфейс ReactiveMongoRepository, то можно увидеть, что нам возвращаются объекты, обернутые в уже знакомые нам классы Mongo и Flux. Это значит, что при каком-либо обращении в БД, мы не получаем сразу же результат. Вместо этого мы получаем поток данных, из которого можно получить данные по мере готовности.

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

    Наш сервис достаточно прост, поэтому сразу создаем несколько полезных методов. И тут же реализуем их:

    Здесь стоит заметить, что внедрение зависимости UserRepository происходит через конструктор с помощью аннотации AllArgsConstructor. На всякий случай напомню, что с некоторой версии Spring 4 можно осуществлять автоматическое внедрение зависимостей через конструктор без аннотации Autowire.

    И, наконец, сделаем контроллер:

    Запустим наше приложение. Все должно работать. Теперь сделаем POST запрос на localhost:8080/users со следующим содержимым:

    В ответ мы получим такой же объект, но с присвоенным ему id:

    Отлично! Давайте сохраним еще пару пользователей и попробуем посмотреть, что у нас уже есть в БД. У меня такой результат GET запроса на localhost:8080/users:

    Отлично! У нас есть целый сервис, который работает в асинхронном режиме! Но есть еще кое-что, о чем следует помнить. Работа с асинхронным репозиториями может очень сильно поменять вид сервиса, который получает данные из него.

    Чтобы продемонстрировать это, создадим еще один обработчик URL метода в нашем контроллере:

    Здесь все просто. Мы получаем фамилию пользователя и выводим всех людей с такой фамилией.

    Конечно, такую логику можно возложить на базу данных, но здесь я хотел бы обратить внимание, как это будет выглядит в сервисе:

    Читать еще:  Как проверить материнскую плату на исправность?

    Обратите внимание, что есть разница в работе с данными и потоками данных. Обычно мы осуществляем какие-то действия над данными непосредственно. Здесь ситуация другая. Мы говорим, что следует сделать в потоке данных.

    Попробуем сделать GET запрос по URL localhost:8080/users/Griffin. У меня такой результат:

    В этой статье мы рассмотрели, как построить асинхронный сервис с новым фреймворком WebFlux и сервером Netty (он идет из коробки по умолчанию). Также мы убедились, как легко этого достичь со Spring Boot 2. Если у вас на проекте микросервисная архитектура, то скорее всего вы легко сможете при желании перевести свои приложения на WebFlux с выходом Spring Boot 2(если, конечно, в этом есть потребность).

    Микросервисы со Spring Boot. Часть 2. Создание микросервиса Forex

    Это вторая часть серии статей по основам микросервисных архитектур, в которой показывается, как создать микросервис с помощью Spring Boot и заставить его работать с Spring MVC, JPA, Hibernate и H2.

    В этой серии статей вы познакомитесь с концепцией микросервисов и узнаете, как создавать микросервисы с помощью Spring Boot и Spring Cloud.

    Это руководство поможет вам изучить основы микросервисных архитектур. Мы также начнем рассматривать базовую реализацию микросервиса со Spring Boot.

    Мы создадим пару микросервисов и заставим их общаться друг с другом с помощью сервера имен Eureka (Eureka Naming Server) и Ribbon для балансировки нагрузки на стороне клиента.

    Это статья входит в серию статей «Микросервисы со Spring Boot»:

    • Часть 1. Начало работы с архитектурой микросервисов
    • Часть 2. Создание микросервиса Forex
    • Часть 3. Создание микросервиса конвертации валют
    • Часть 4. Использование Ribbon для балансировки нагрузки
    • Часть 5. Использование сервера имен Eureka

    Вы изучите

    • Как создать микросервис с помощью Spring Boot?
    • Как создать JPA сущность и ресурс?
    • Как заставить Spring MVC, Spring Boot, JPA, Hibernate и H2 работать вместе?

    Обзор ресурсов

    Forex Service (FS) является поставщиком услуг. Он обеспечивает значения курсов обмена валюты для различных валют. Давайте предположим, что он общается с Forex Exchange и предоставляет текущие значения курсов обмена различных валют.

    Пример запроса и ответа показан ниже:

    Запрос выше возвращает обменный курс евро к INR. В ответе получается, что коэффициент конвертации ConversionMultiple равен 75.

    Структура кода проекта

    На следующем скриншоте показана структура проекта, который мы создадим.

    Некоторые элементы проекта:

    • SpringBootMicroserviceForexServiceApplication.java — класс Spring Boot приложения, созданный с помощью Spring Initializer. Этот класс действует как точка запуска приложения.
    • pom.xml — содержит все зависимости, необходимые для создания этого проекта. Мы будем использовать Spring Boot Starter Web и JPA.
    • ExchangeValue.java — объект, содержащий количество валюты для обмена.
    • ExchangeValueRepository.java — JPA репозиторий для ExchangeValue. Он создан с помощью Spring Data JpaRepository.
    • ForexController.java — Spring REST контроллер, предоставляющий сервис конвертации форекс.
    • data.sql — исходные данные для таблицы exchange_value. Spring Boot выполнит этот скрипт после того, как таблицы будут созданы из сущностей.

    Вам понадобятся

    • Maven 3.0+ — инструмент для сборки
    • Ваш любимый IDE. Мы используем Eclipse.
    • JDK 1.8+

    Готовый проект Maven с примерами кода

    Создание проекта с помощью Spring Initializr

    Создание микросервиса с Spring Initializr — это легкая прогулка.

    Spring Initializr: start.spring.io — отличный инструмент для быстрого создания ваших проектов Spring Boot.

    С помощью Spring Initializr вы можете создавать самые разные проекты.

    Следующие шаги нужно сделать для создания проекта разработки веб-сервисов:

    1. Запустите Spring Initializr и наберите следующее:
    • Наберите com.in28minutes.springboot.microservice.example.forex в качестве группы.
    • Наберите в качестве артефакта spring-boot-microservice-forex-service.
    • Выберите следующие зависимости:
    Читать еще:  Доработки в офлайн-режиме Google Chrome для Android

    — Web
    — DevTools
    — Стартер JPA
    — H2
    2. Нажмите Generate Project.

    3. Импортируйте проект в Eclipse: File -> Import -> Existing Maven Project.

    Создание класса Exchange Value

    Важные вещи, на которые стоит обратить внимание:

    • @Entity: указывает, что класс является сущностью. Эта аннотация применяется к классу сущностей.
    • @Id: Определяет первичный ключ объекта.

    Создание JPA-репозитория Exchange Value

    1. public interface ExchangeValueRepository extends JpaRepository

    расширяет JpaRepository, используя два дженерика: ExchangeValue и Long. ExchangeValue является объектом, которым управляют, а первичным ключом ExchangeValue является Long.

    2. ExchangeValue findByFromAndTo (String from, String to)

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

    Создаем ресурс ForexController

    Примечания:
    1. @RestController public class ForexController <
    создает контроллер для предоставления REST сервиса
    2. @Autowired private Environment environment
    возвращает порт (port) сервера. Это поможет определить, какой экземпляр сервиса возвращает ответ.
    3. @Autowired private ExchangeValueRepository repository — автоматическое подключение репозитория.
    4. ExchangeValue exchangeValue = repository.findByFromAndTo(from, to) — получаем значение курса обмена валют из базы данных.
    5. exchangeValue.setPort(Integer.parseInt(environment.getProperty(«local.server.port»)))
    получает атрибут порт (port) из объекта environment и устанавливает его в бин ответа.

    Настройка Application Name и несколько других настроек

    Назначаем порт 8000 для этого приложения и включаем ведение журнала для отладки.

    Создание реактивных RESTFUL API с использованием Spring Boot / WebFlux

    Build Reactive RESTFUL APIs using Spring Boot/WebFlux

    Усвойте реактивное программирование в Spring с использованием WebFlux / Reactor и научитесь создавать сквозные неблокирующие RESTFUL APIs.

    Этот курс структурирован так, чтобы дать вам как теоретический, так и программный аспект API-интерфейсов Reactive Programming и Reactive RestFul с использованием Spring WebFlux.

    Если вы с нетерпением ждете, чтобы узнать ниже перечисленные вещи:

    • Что такое реактивное программирование?
    • Реактивное программирования с помощью Spring WebFlux.
    • Реактивное программирования с БД.
    • Создание реактивных API RestFul с помощью Spring WebFlux

    Тогда это правильный курс для вас. Это чистый практический курс, где вы будете писать много кода.

    К концу этого курса вы получите полное представление о программировании и реализации Reactive API с использованием Spring WebFlux.

    Почему Реактивное Программирование?

    • В этом разделе рассказывается о необходимости реактивного программирования и подробно объясняется текущая модель исполнения в Spring-MVC.
    • В этом разделе рассказывается о недостатках spring-mvc .
    • В этом разделе рассказывается о модели параллелизма в Spring-MVC.

    Что такое реактивное программирование?

    • В этом разделе говорится о том, что такое реактивное программирование?
    • Как реактивное программирование работает в двух словах на простом примере.
    • В этом разделе вы познакомитесь со спецификацией Reactive Streams.
    • В этом разделе будет дано полное представление о «Реактивных библиотеках», которые существуют там.

    Начало работы с Project Reactor

    • В этом разделе вы ознакомитесь со всеми основами Project Reactor и рассмотрите его на нескольких примерах.
    • В этом разделе подробно рассматриваются реактивные типы Flux и Mono.

    Настройка проекта для этого курса

    • В этом разделе мы создадим проект для этого курса, используя веб-сайт Spring Intializr.

    Реактивное программирование (Flux и Mono) — практические занятия + тестирование Junit

    • В этом разделе мы рассмотрим, как Flux и Mono работают через код.
    • Мы сделаем живое программирование того, как писать тестовые примеры Junit, используя Flux и Mono.
    • Мы рассмотрим множество различных операторов в Flux и Mono.

    Создайте первый неблокирующий RESTFUL API с использованием аннотированных контроллеров — Hands On

    • В этом разделе мы создадим первый неблокирующий API с использованием аннотированных контроллеров.
    • В этом разделе рассматриваются основы работы реактивного API.
    • В этих разделах также описывается аспект кодирования того, как вернуть Flux / Mono из конечной точки.
    • В этом разделе также описывается, как писать контрольные примеры JUNIT с использованием WebTestClient.
    Читать еще:  Как отформатировать заблокированную флешку?

    Создание неблокирующего RESTFUL API с использованием функциональной сети — Hands On

    • В этом разделе мы создадим неблокирующий API с помощью функционального веб-модуля.
    • В этом разделе рассказывается о RouterFunction и HandlerFunction, которые составляют основу для функционального веб-модуля.
    • В этом разделе также описывается, как писать контрольные примеры JUNIT с использованием WebTestClient.

    Spring WebFlux & Netty — модель исполнения

    • В этом разделе рассказывается о различных слоях WebFlux для обслуживания HTTP-запросов / ответов.
    • В этих разделах рассматриваются концепции NETTY, такие как Channel, EventLoop и некоторые технические аспекты Netty.

    Обзор Реактивного API

    • В этом разделе представлен обзор Reactive API, который мы собираемся создать в рамках этого курса.

    Реактивное программирование в базах данных — MongoDB — Hands On

    • В этом разделе мы узнаем о том, как написать код реактивного программирования с MongoDB.
    • Определите документ позиции для проекта.
    • В этом разделе рассказывается о настройке различных профилей в Spring Boot.
    • В этом разделе мы настроим адаптер ItemReactive Mongo DB.
    • В этом разделе также описывается, как писать контрольные примеры JUNIT для реактивного репозитория.

    Создайте конечную точку API реактивного элемента — с помощью RestController

    • В этом разделе мы узнаем о том, как кодировать Реактивный API Item CRUD, используя подход @RestController.
    • В этом разделе также описывается, как писать автоматизированные тесты с использованием JUNIT и неблокирующего тестового клиента WebTestClient.

    Создайте конечную точку API Reactive Item — используя функциональную сеть

    • В этом разделе мы узнаем о том, как кодировать Реактивный API Item CRUD, используя функциональный веб-подход.
    • В этом разделе также описывается, как писать автоматизированные тесты с использованием JUNIT и неблокирующего тестового клиента WebTestClient.

    Создайте неблокирующий клиент с помощью WebClient

    • В этом разделе мы рассмотрим методы взаимодействия с Reactive API с помощью WebClient.
    • Изучите методы вызова Reactive API с использованием методов exchange () и retrieve ().
    • Мы изучим операции GET, PUT, POST и DELETE с помощью WebClient.

    Обработка исключений в WebFlux — RestController

    • В этом разделе мы будем писать и исследовать различные подходы для обработки исключений / ошибок, возникающих в реактивном API, построенном с использованием RestController.
    • Обрабатывать исключения, используя @ExceptionHandler и @ControllerAdvice.
    • В этом разделе также описывается, как писать тестовые случаи JUNIT для сценариев исключений.

    Обработка исключений в WebFlux — Функциональный веб

    • В этом разделе мы будем писать и исследовать различные подходы для обработки исключений / ошибок, возникающих в реактивном API, построенном с использованием Functional Web.
    • Обрабатывать исключения, используя WebExceptionHandler.
    • В этом разделе также описывается, как писать тестовые случаи JUNIT для сценариев исключений.

    WebClient — обработка исключений

    • В этом разделе мы будем писать и исследовать, как обрабатывать исключения с помощью WebClient.
    • Изучите методы обработки исключений с помощью методов exchange () и retrieve ().

    Потоковая передача данных в реальном времени с использованием WebFlux — событий на стороне сервера (SSE)

    • В этом разделе мы будем писать код и узнавать о создании конечной точки для потоковой передачи данных в реальном времени с использованием Mongo DB и Spring WebFlux.
    • В этом разделе рассказывается о доступных курсорах и ограниченных коллекциях в базе данных Mongo.
    • Создайте неблокирующую потоковую конечную точку и взаимодействуйте с БД Mongo с помощью аннотации @Tailable.
    • Научитесь писать автоматические тесты, используя JUNIT для потоковых конечных точек (SSE).
    Ссылка на основную публикацию
    Статьи c упоминанием слов:
    Adblock
    detector