2015-12-07 『Learning Reactive Programming with Java 8』 もくもく読書会(Chapter 1)の振り返り
- 作者: Nickolay Tsvetinov
- 出版社/メーカー: Packt Publishing
- 発売日: 2015/06/24
- メディア: ペーパーバック
- この商品を含むブログを見る
Chapter1: An Introduction to reactive programming
サンプルファイルのダウンロード
- ホームページ > Code Filesのリンクをクリック
- 入力ページでメールアドレスと名前を入れて送信
- メールアドレスにダウンロードファイルのリンクが送信される
サンプルのインポート
- サンプルファイルを解凍しておく
- Eclipse > ヘルプ > EclipseマーケットプレースからGradleのプラグイン(Gradle Integration for Eclipse 3.7.2.RELEASE)をインストール
- インポート > Gradle > Gradleプロジェクト
- ルートフォルダにサンプルのCode filesを指定
- モデルのビルド
- 問題なければ完了
Intoroduction
Reactive Programmingは最近のトレンドである
下記のような大きな企業もそのコンセプトをサポートし使っている
- SoundCloud
- Microsoft
- Netflix
Javaで並行処理と単純なアプリケーションを標準(built-in tools)だけで行うのは大変
→ Reactive Programing を使うことで変えることができる
ReactiveProgrammingとは
- 変化に対しての解決法のパラダイム
→ データが変わるとそれに関連するものも反応するプログラム - 例えるとExcelのセルに入れた式のようなもの
→ 式が参照しているセルの値が変わると、それに反応して式の結果も変わる
Reactiveにすべき理由
Reactive Manifest(http://reactivemanifest.org)の4つの原則
- modular/dynamic: 全システムを止めずにモジュールをオフにもオンにもできる
→ システムをイベント駆動にすれば可能(通知によって反応(react)させる) - scalable: 大量のデータやユーザのリクエストに対応できる
→ データが増えれば新しいコンポーネントの追加や古いコンポーネントの削除をシステムを止めずにが可能 - fault-tolerant: ユーザに対してシステムは安定している
→ 失敗やエラーを処理するコンポーネントに通知する - responsive: 反応が早くアクセス可能(available)である
→ ユーザの行動に反応(react)させる
イベント駆動のアプリケーション
Reactive Manifestの定義はReactive Programmingのことではないが、Manifestoを実現するのにReactive Programmingにするのが一番簡単
RxJava
- https://github.com/ReactiveX/RxJava
- JavaでReactive ProgrammingするためのNetflixが提供しているオープンソースのライブラリ
- Java 8のラムダに対応している
- 他のライブラリとの依存関係はない
Comparing the iterator pattern and the RxJava Observable
※ RxJavaのObservableはjava.util.Observableとは違う
Iteratorパターンの場合
- 1つずつListの要素を取得し処理を行う
- 要素ごとの処理に時間がかかるようだと全ての処理が終わるまでに時間がかかる
RxJava Observable の場合
- ProducerがListの要素を同時にpushし、通知を受け取ったConsumerが処理をする
- RxJava Observableは非同期のIteratorのようなもの
RxJava Observable について
- すべての要素を使った際の処理を行いたい場合は
OnCompleted
を通知されるのを待つようにする - エラー発生時にObservableにエラーを処理するListenerをつけて対応させる
Observable<String> observable = Observable.from(list); observable.subscribe( 要素ごとのの処理をするListener, エラー処理のListener, 全要素の対応が終わった際のListener );
次回
Chapter 1 の Implementing the reactive sum から