Национальный цифровой ресурс Руконт - межотраслевая электронная библиотека (ЭБС) на базе технологии Контекстум (всего произведений: 639329)
Контекстум
Антиплагиат Руконтекст

Практика реактивного программирования в Spring 5. Создание облачных реактивных систем с помощью Spring 5 и Project Reactor (5000,00 руб.)

0   0
Первый авторДокука
АвторыЛозинский И.
ИздательствоМ.: ДМК Пресс
Страниц509
ID795190
АннотацияДанная книга посвящена реактивному программированию в Spring. Описаны многочисленные возможности построения эффективных реактивных систем с помощью Spring 5 и других инструментов, таких как WebFlux, Spring Boot и Project Reactor. Приведены методы реактивного программирования и их использование для взаимодействий с базами данных и между серверами. Рассмотрено создание независимых и высокопроизводительных микросервисов с помощью Spring Cloud Streams. Издание предназначено разработчикам на Java, использующим фреймворк Spring для своих задач и желающим научиться создавать надежные и реактивные приложения, способные автоматически масштабироваться в облаке.
ISBN978-5-97060-747-3
УДК4.432
ББК32.972.1
Докука, О. Практика реактивного программирования в Spring 5. Создание облачных реактивных систем с помощью Spring 5 и Project Reactor / И. Лозинский; О. Докука .— Москва : ДМК Пресс, 2019 .— 509 с. — ISBN 978-5-97060-747-3 .— URL: https://rucont.ru/efd/795190 (дата обращения: 21.06.2024)

Предпросмотр (выдержки из произведения)

Практика_реактивного_программирования_в_Spring_5._Создание_облачных_реактивных_систем_с_помощью_Spring_5_и_Project_Reactor.pdf
УДК 004.432 ББК 32.972.1 Д63 Д63 Олег Докука, Игорь Лозинский Практика реактивного программирования в Spring 5. – М.: ДМК Пресс, 2019. – 508 с. ISBN 978-5-97060-747-3 Данная книга посвящена реактивному программированию в Spring. Описаны многочисленные возможности построения эффективных реактивных систем с помощью Spring 5 и других инструментов, таких как WebFlux, Spring Boot и Project Reactor. Приведены методы реактивного программирования и их использование для взаимодействий с базами данных и между серверами. Рассмотрено создание независимых и высокопроизводительных микросервисов с помощью Spring Cloud Streams. Издание предназначено разработчикам на Java, использующим фреймворк Spring для своих задач и желающим научиться создавать надежные и реактивные приложения, способные автоматически масштабироваться в облаке. УДК 004.432 ББК 32.972.1 Все права защищены. Любая часть этой книги не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав Материал, изложенный в данной книге, многократно проверен. Но, поскольку вероятность технических ошибок все равно существует, издательство не может гарантировать абсолютную точность и правильность приводимых сведе ний. В связи с этимиздательство не несет ответственности за возможные ошибки, связанные с использованием книги. ISBN 978-5-97060-747-3 (рус.) © Олег Докука, Игорь Лозинский, 2018 ISBN 978-1-78728-495-1 (анг.) © Оформление, издание, ДМК Пресс, 2019
Стр.5
Оглавление Предисловие Глава 1. Причины выбора Spring Основные преимущества реактивности Взаимодействия на основе обмена сообщениями Примеры использования реактивности Заключение Глава 2. Реактивное программирование в Spring. Основные понятия Первые реактивные решения в Spring Шаблон «Наблюдатель» Примеры использования шаблона «Наблюдатель» Шаблон «Публикация/Подписка» с использованием @EventListener Создание приложений с @EventListener Создание приложения на основе Spring Реализация бизнес-логики Настройка поддержки асинхронного выполнения Критический обзор решения RxJava как реактивный фреймворк Создание пользовательского интерфейса с поддержкой SSE Проверка приложения «Наблюдатель» плюс «Итератор» равно «реактивный поток» Производство и потребление потоков Генерация последовательности асинхронных событий Преобразование потоков и диаграммы Marble Оператор map Оператор filter Оператор count Оператор zip 7 Причины добавления поддержки реактивности в Spring Реактивность на уровне служб 22 22 25 30 33 34 42 44 Асинхронные взаимодействия по HTTP с помощью Spring Web MVC Публикация конечной точки SSE 44 45 49 52 54 54 55 57 57 59 60 61 61 Требования и преимущества RxJava Переделка приложения с RxJava Реализация бизнес-логики Нестандартный SseEmitter Публикация конечной точки SSE Конфигурация приложения Краткая история развития реактивных библиотек Реактивный ландшафт Заключение Глава 3. Reactive Streams – новый стандарт потоков Реактивность для всех Проблема несовместимости API 62 63 65 68 69 69 70 71 71 72 75 75 77 78 79 80 82 84 85 85 86
Стр.11
Оглавление Модели обмена PULL и PUSH Проблема управления потоком данных Медленный производитель и быстрый потребитель Быстрый производитель и медленный потребитель Неограниченная очередь Решение Основные положения стандарта Reactive Streams Требования Reactive Streams в действии Введение в понятие обработчика Processor Проверка совместимости с Reactive Streams Проверка издателя Publisher Проверка подписчика Subscriber JDK 9 Асинхронный и параллельный API в Reactive Streams Преображение реактивного ландшафта Изменения в RxJava Изменения в Vert.x Заключение Глава 4. Project Reactor – основа реактивных приложений Краткая история Project Reactor Project Reactor 1.x Project Reactor 2.x Основы Project Reactor Mono Добавление библиотеки Reactor в проект Реактивные типы: Flux и Mono Flux Реактивные типы из RxJava 2 Observable Flowable Single Maybe Создание последовательностей Flux и Mono Подписка на реактивный поток Реализация своих подписчиков Completable Преобразование реактивных последовательностей с помощью операторов Отображение элементов реактивных последовательностей Фильтрация реактивных последовательностей Сбор данных из реактивных последовательностей [ 11 ] Усовершенствования в Ratpack Драйвер MongoDB с поддержкой Reactive Streams Комбинирование реактивных технологий на практике Ограниченная очередь со сбросом избыточных элементов Ограниченная очередь с блокировкой 89 95 95 96 96 97 97 99 99 106 109 113 115 117 121 123 125 125 129 130 131 132 135 137 137 138 141 142 144 145 145 147 148 148 148 148 149 149 149 151 154 156 157 158 160
Стр.12
Оглавление Сокращение элементов потока Комбинирование реактивных потоков Пакетная обработка элементов потока Операторы flatMap, concatMap и flatMapSequential Извлечение выборки элементов Преобразование реактивных последовательностей в блокирующие структуры Создание потоков данных программным способом Фабричные методы push и create Фабричный метод generate Обработка ошибок 161 164 164 168 170 Просмотр элементов при обработке последовательности Материализация и дематериализация сигналов Поиск подходящего оператора Обертывание транзакций с помощью фабричного метода usingWhen Управление обратным давлением Передача одноразовых ресурсов в реактивные потоки Горячие и холодные потоки данных Работа со временем Процессоры Совместное использование элементов из потока Компоновка и преобразование реактивных потоков Тестирование и отладка Project Reactor Продвинутые средства в Project Reactor Дополнения к Reactor Жизненный цикл реактивных потоков данных Этап сборки Модель планирования потоков выполнения в Reactor Оператор publishOn Этап подписки Выполнение Особенности внутренней реализации Project Reactor Макрослияние Микрослияние Оператор subscribeOn Оператор parallel Планировщик Контекст Заключение Глава 5. Добавление реактивности с помощью Spring Boot 2 Быстрый старт как ключ к успеху [ 12 ] Использование Spring Roo для ускорения разработки приложений Spring Boot как ключ к созданию быстро растущих приложений Параллельная обработка с помощью publishOn Широковещательная рассылка элементов потока данных Кеширование элементов потока 170 171 172 173 173 173 174 175 178 180 183 184 185 186 187 188 188 190 191 192 193 193 193 195 196 199 199 201 202 204 204 205 209 210 211 214 216 217 219 219
Стр.13
Оглавление Реактивность в Spring Boot 2.0 Реактивность в Spring Core Реактивность в Web Поддержка преобразования реактивных типов Реактивный ввод/вывод Реактивность в Spring Data Реактивность в Spring Session Реактивность в Spring Security Реактивность в Spring Cloud Реактивность в Spring Test Реактивность в мониторинге Заключение Глава 6. Неблокирующие и асинхронные взаимодействия с WebFlux WebFlux как основа реактивного сервера Реактивное веб-ядро Реактивные фреймворки Web и MVC Чисто функциональные приемы в WebFlux Неблокирующие взаимодействия между службами с WebClient Реактивный WebSocket API Серверный WebSocket API Клиентский WebSocket API Сравнение WebFlux WebSocket и Spring WebSocket Реактивный поток SSE и легковесная замена WebSocket Реактивные механизмы шаблонов Реактивная безопасность Взаимодействия с другими реактивными библиотеками Сравнение WebFlux и Web MVC Реактивный доступ к SecurityContext Использование реактивной безопасности Законы сравнения фреймворков Закон Литтла Закон Амдала Анализ и сравнение Универсальный закон масштабируемости Модели обработки в WebFlux и Web MVC 220 221 221 222 224 226 227 228 228 229 229 230 231 231 234 238 242 246 249 250 251 252 253 255 258 258 261 262 Влияние моделей обработки на пропускную способность и задержку Проблемы модели обработки в WebFlux Потребление памяти разными моделями обработки Влияние модели обработки на удобство Практическое применение WebFlux Системы на основе микросервисов Заключение [ 13 ] Системы, обслуживающие клиентов с медленными соединениями Потоковые системы или системы реального времени WebFlux в действии 263 264 264 265 269 272 272 274 282 285 291 292 292 294 294 295 299
Стр.14
Оглавление Глава 7. Реактивный доступ к базам данных Модели обработки данных в современном мире Предметно-ориентированное проектирование Хранение данных в эпоху микросервисов Использование хранилищ разного типа База данных как услуга Событийно-ориентированные архитектуры Согласованность в конечном счете Шаблон SAGA Регистрация событий Разделение ответственности на команды и запросы Бесконфликтно реплицируемые типы данных Синхронная модель извлечения данных Протокол связи для доступа к базе данных Драйвер базы данных JDBC Управление соединениями Spring JDBC Spring Data JDBC JPA Spring Data JPA Реактивный доступ к базе данных Добавление реактивности в Spring Data JDBC Добавление реактивности в JPA Добавление реактивности в Spring Data JPA Ограничения синхронной модели Spring Data NoSQL Достоинства синхронной модели Реактивный доступ к данным с использованием Spring Data Реактивное хранилище на основе MongoDB Объединение операций с хранилищем Как работают реактивные хранилища Поддержка разбиения на страницы Использование реактивных драйверов (MongoDB) Использование асинхронных драйверов (Cassandra) Реактивные транзакции Детали реализации ReactiveMongoRepository Использование ReactiveMongoTemplate Распределенные транзакции с шаблоном SAGA Реактивные коннекторы в Spring Data Реактивный коннектор MongoDB Реактивный коннектор Cassandra Реактивные транзакции в MongoDB 4 [ 14 ] Система обмена сообщениями как хранилище данных 301 302 Разделение данных между микросервисами Распределенные транзакции 302 303 306 307 309 310 310 311 312 312 313 314 315 316 316 318 319 320 321 322 323 326 326 327 327 328 329 332 333 334 336 339 344 345 345 346 348 350 352 352 361 361 361 362
Стр.15
Оглавление Ограничения и ожидаемые улучшения Асинхронный доступ к базам данных Реактивный коннектор Couchbase Реактивный коннектор Redis Реактивное соединение с реляционной базой данных Использование R2DBC вместе с Spring Data R2DBC Преобразование синхронного хранилища в реактивное С помощью библиотеки rxjava2-jdbc Обертывание синхронного CrudRepository Реактивный Spring Data в действии Заключение Глава 8. Масштабирование с Cloud Streams Брокеры сообщений как основа систем, управляемых сообщениями Балансировка нагрузки на стороне сервера Балансировка нагрузки на стороне клиента с Spring Cloud и Ribbon Рынок брокеров сообщений Spring Cloud Data Flow Spring Cloud Streams как мост в экосистему Spring Реактивное программирование в облаке Модульная организация приложений с Spring Cloud Function Spring Cloud – функция как часть конвейера обработки данных RSocket для реактивной передачи сообщений с низкой задержкой RSocket и Reactor-Netty RSocket в Java RSocket и gRPC RSocket в Spring Framework RSocket в других фреймворках Проект ScaleCube Проект Proteus В заключение о RSocket Заключение Глава 9. Тестирование реактивных приложений Почему реактивные потоки данных сложно тестировать? Тестирование реактивных потоков с помощью StepVerifier Основы StepVerifier Проверка реактивного контекста Тестирование WebFlux Продвинутые приемы тестирования с использованием StepVerifier Виртуальное время Тестирование контроллеров с помощью WebTestClient Тестирование WebSocket [ 15 ] Брокеры сообщений как эластичный и надежный слой для передачи сообщений 362 363 364 365 367 369 370 371 373 378 382 383 384 384 386 392 396 397 406 407 409 416 420 421 425 428 430 432 432 433 433 433 435 435 436 436 440 442 445 445 446 451
Стр.16
Оглавление Заключение Глава 10. И наконец, выпуск! Важность поддержки идеологии DevOps в приложениях Мониторинг реактивных Spring-приложений Spring Boot Actuator Добавление механизма мониторинга в проект Конечная точка для получения информации о службе Конечная точка для получения информации о работоспособности Конечная точка для получения информации о параметрах работы Конечная точка управления журналированием Другие важные конечные точки Micrometer Реализация своей конечной точки для Actuator Безопасность конечных точек Параметры по умолчанию в Spring Boot Мониторинг реактивных потоков данных Мониторинг потоков в Reactor 455 456 456 460 Распределенная трассировка с Spring Boot Sleuth Пользовательский интерфейс Spring Boot Admin 2.x Мониторинг планировщиков в Reactor Реализация своих параметров Micrometer Развертывание в облаке Развертывание в Amazon Web Services Развертывание в Google Kubernetes Engine Развертывание в Pivotal Cloud Foundry Обнаружение RabbitMQ в PCF Обнаружение MongoDB в PCF Заключение Указатель 460 460 461 463 466 467 468 469 470 472 473 474 474 475 477 478 480 482 485 486 487 488 489 491 492 Развертывание в PCF без конфигурации с помощью Spring Cloud Data Flow 491 Knative для FaaS на основе Kubernetes и Istio Советы по успешному развертыванию приложений 493 495 [ 16 ]
Стр.17

Облако ключевых слов *


* - вычисляется автоматически
Периодика по подписке
Антиплагиат система Руконтекст