眠いし、最近Java書いてないし、非同期とかあまりつかってないので、あまりピンとこない分野ですので、雑に書きます。
で、件の勉強会に行きました。
感想概要
Reactiveホゲホゲについては、まあ、データが来たら、変換して、IOを発生させるくらいの認識しかなかったので、とっかかりが欲しかったので申し込みましたが、如何せん非同期とかをうまく組み合わせてレスポンスを作るなどの(Play!Scalaでよくあるような非同期プログラミング)については全然扱ったことがなかったので、結構内容を把握するのが辛かったです。
発表資料
こちらにあるようです。
Reactive Streams 入門
前者の資料。@okapiesによる発表。
資料作りに気合入って、資料は結構飛ばし飛ばしで発表されていました。
僕の非Reactiveなシーケンシャルでブロッキングな脳で理解したところは次のあたりです。
- Reactive Systemの問題圏は大規模なデータを高可用性で捌くための設計原則を備えたものをそう呼ぶ
- 全体的に
Subscriber
はPublisher
に対して、処理できるデータキャパシティーを伝えることで、データの流量を制御するような仕組みを備える。一般的にリアクティブと言った時にはデータは垂れ流しなイメージがあるが、そうではない。データの流量を制御する所にポイントがある。 - Java SE9での標準化を目指している(でも、実装はバラバラ…(´・ω・`))。
- Reactive ProgrammingとReactive Manifestは別物
- それらの間にある概念がReactive Stream
また、Reactive StreamはJDK9での標準化を目指しているとのことで、仕様も策定しているようです。TCKなどはこちらから入手できます。
実は、おさらいを書いててあまりReactive Stremasについてピンときません。ScalaでAkkaつかって、非同期なAPIコールをたくさん使えば、納得できるのかもしれませんが。ただし、マイクロサービスでシステムを内部的にAPIコールでつないでいるようなシステムをやっていると、呼び出しやそのリターンがFuture
まみれになるので、別にScalaでなくても実感できるんじゃないかなぁ。
Reactive Streamsを使ってみよう
よしださんの発表(後者の資料)。
RXJavaのサンプルコードから始まって、APIコールまでのサンプルコードが提示されていましたが、やっぱり動かさないと納得出来ないので、正直あまり内容を理解していない。僕のように資料から意図を汲み取れない人間はソースコードを動かすのが一番なので、あとでちょっと質問してみました。
@mike_neck 後で資料を修正しておきますが、github pagesで作っているので、急ぎであれば私のgithubにレポジトリがあります。
— とーます (@grimrose) 2015, 6月 24
というわけで、後でちょっと触ってみようと思います。
ちなみにわかったことは次の通り。
Publisher
とSubscriber
は同一のJVM上に存在する。Publisher
はデータの取得に時間がかかる処理(DBアクセス、APIコール、WebSocketなどの定期的にデータが流れてくるストリーム)をラップしている奴Subscriber
はPublisher
から発生するデータを何らかの関数で処理して、IOを発生させる奴ら
RxJavaとかのキーワードでQiitaに出ているサンプルとか読むと、
Observable.from(1,2,3,4,5)
みたいな、コードが出てくるけど(これは単純化のため仕方がない)、正格な評価戦略をとるJavaだと、このデータストリームはすでに生成されているし、タイミングも一定になっているから、Publisher
が何者なのかがつかめなくなると思います。実際に、ReactiveってJava8のStreamと何が違うん?的な質問が多かったように思えます。今後RxJavaとはこれだ的なエントリーを書く人については、お前それRxJavaのサンプルコードパクっただけで理解してないんじゃん?って邪推してしまうので、是非とも今後はTwitter Stream
APIをつかったようなサンプルを書くことを期待したいですね。
以上、眠いので要求したいことだけ要求して、雑にまとめた。
【2015/06/25 6:59 追記・編集】資料の位置がわかりづらかったり、サンプルコードのリポジトリーが載ってなかったり、誤字もあったので、追記・編集した。あと鬱っぽい記述削除した。