読者です 読者をやめる 読者になる 読者になる

mike-neckのブログ

JavaかJavaFXかJavaEE(なんかJava8が多め)

JJUG ナイトセミナー「Reactive Streams特集」に行ってきた #JJUG

眠いし、最近Java書いてないし、非同期とかあまりつかってないので、あまりピンとこない分野ですので、雑に書きます。

で、件の勉強会に行きました。

jjug.doorkeeper.jp


感想概要

Reactiveホゲホゲについては、まあ、データが来たら、変換して、IOを発生させるくらいの認識しかなかったので、とっかかりが欲しかったので申し込みましたが、如何せん非同期とかをうまく組み合わせてレスポンスを作るなどの(Play!Scalaでよくあるような非同期プログラミング)については全然扱ったことがなかったので、結構内容を把握するのが辛かったです。

発表資料

こちらにあるようです。

speakerdeck.com

Reactive Streamsを使ってみよう


Reactive Streams 入門

前者の資料。@okapiesによる発表。

資料作りに気合入って、資料は結構飛ばし飛ばしで発表されていました。

僕の非Reactiveなシーケンシャルでブロッキングな脳で理解したところは次のあたりです。

  • Reactive Systemの問題圏は大規模なデータを高可用性で捌くための設計原則を備えたものをそう呼ぶ
  • 全体的にSubscriberPublisherに対して、処理できるデータキャパシティーを伝えることで、データの流量を制御するような仕組みを備える。一般的にリアクティブと言った時にはデータは垂れ流しなイメージがあるが、そうではない。データの流量を制御する所にポイントがある。
  • Java SE9での標準化を目指している(でも、実装はバラバラ…(´・ω・`))。
  • Reactive ProgrammingとReactive Manifestは別物
  • それらの間にある概念がReactive Stream

また、Reactive StreamはJDK9での標準化を目指しているとのことで、仕様も策定しているようです。TCKなどはこちらから入手できます。

github.com

実は、おさらいを書いててあまりReactive Stremasについてピンときません。ScalaでAkkaつかって、非同期なAPIコールをたくさん使えば、納得できるのかもしれませんが。ただし、マイクロサービスでシステムを内部的にAPIコールでつないでいるようなシステムをやっていると、呼び出しやそのリターンがFutureまみれになるので、別にScalaでなくても実感できるんじゃないかなぁ。

Reactive Streamsを使ってみよう

よしださんの発表(後者の資料)。

RXJavaのサンプルコードから始まって、APIコールまでのサンプルコードが提示されていましたが、やっぱり動かさないと納得出来ないので、正直あまり内容を理解していない。僕のように資料から意図を汲み取れない人間はソースコードを動かすのが一番なので、あとでちょっと質問してみました。

github.com

というわけで、後でちょっと触ってみようと思います。

ちなみにわかったことは次の通り。

  • PublisherSubscriberは同一のJVM上に存在する。
  • Publisherはデータの取得に時間がかかる処理(DBアクセス、APIコール、WebSocketなどの定期的にデータが流れてくるストリーム)をラップしている奴
  • SubscriberPublisherから発生するデータを何らかの関数で処理して、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 追記・編集】資料の位置がわかりづらかったり、サンプルコードのリポジトリーが載ってなかったり、誤字もあったので、追記・編集した。あと鬱っぽい記述削除した。