Использую данную технологию уже больше года, а потому решил, наконец, основательно разобраться как она работает и зачем она нужна.
Заодно пробежался по родственным JSE / JEE с целью проанализировать сходства / различия, а также когда чего применять.
Надеюсь кому-нибудь тоже пригодится. Бесплатен для любого некоммерческого использования.
Выполнен на основании следующей литературы:
- Tomasz Nurkiewicz and Ben Christensen “Reactive Programming with RxJava”
- Andrea Maglie “Reactive Java Programming”
- Официальная документация и WiKi
- Множество различных статей вокруг данного вопроса
Введение
Основные абстракции и их интерфейсы
- Императивное и функциональное программирование
- Observable - абстракция ленивого источника потока данных или событий
- Observer - потребитель данных, подписывающийся на поток, поставляемый Observable
- Single - поток данных только из одно опционального элемента
- Completable - уведомление о завершении действия
- Maybe - опциональный результат
Создание Observable
- Универсальный метод create(subscriber -> {…} )
- Из перечня уже готовых значений
- Блокирующая генерация
- Асинхронная генерация
- Преобразование между различными типами потоков за счет from()
- Граничные случаи
- Получение набора событий во времени
- Остальное
Потребление событий из Observable
- Асинхронность и конкурентность
- Подписка на события
- Множественные подписчики
Операторы и преобразования
- Фильтрация
- Преобразование данных
- Работа со временем
- Работа с несколькими Observable
- Аггрегация данных
- Группировка данных
- Размножение данных
- Выполнение “sife effect” операций
- Редуцирование потока
- Написание собственных операторов
Конкуретность и планировщики
- Worker & Schedulers
- SubscribeOn()
- ObserveOn()
Hooks
Работа со специальными потоками данных
- Single
- Completable
- StringObservable
- Flowable
- MathObservable
Шаблоны применения в приложениях
- Создание Observable на основе синхронного кода
- Типовой конвейер для обработки экземпляра команды, получающей данные из соединения с внешним источником
- Извлечение данных из Observable
- Распараллеливание обработки данных
- Преобразование асинхронного API обратного вызова в Observable
- Периодический блокирующий опрос изменений извне
- Взаимодействие с CompletableFuture / Future
Противодавление (backpressure)
- Управление с точки зрения конечного подписчика
- Управление с точки зрения поставщика
Ошибки, тестирование и отладка
- Базовые принципы обработки ошибок
- Компенсация ошибок
- Работа с таймаутами
- Повтор после ошибки
- Утечки памяти
- Тестирование
- Мониторинг
Взаимодействие с окружением
- Серверные архитектуры
- Сервера
- HTTP клиенты
- UI
- Реляционные БД
- NoSQL
- Camel
RxJava версия 2
- Причины перехода
- Flowable vs Observable
- Новые методы для тестирования
- Другие крупные отличия
Сравнение с аналогами
- Composable - все эти классы компонуемы и позволяют мыслить функционально
- Lazy
- Reusable
- Asynchronous
- Cacheable
- Push / Pull
- Backpressure
- Operator Fusion
Приложение I - Java IO vs NIO
- Классический I/O
- Неблокирующий I/O
- Выводы
Приложение II - Стандартные средства JDK
- Future & ExecutorServices из Java 5
- Streams
- Java.util.Observable
- Java Reactive Streams
Приложение III - Реактивность в JEE
- JMS and Message Driven Beans
- Асинхронные EJB сессионные бины
- CDI Events/Observers
- Асинхронные сервлеты и NIO
- Asynchronous JAX-RS
- Asynchrony/NIO in WebSocket
- Работа с пулами потоков
- Reactive JPA
Скачивать где обычно -
twirpx