Kashibuchi’s blog

勉強のこと、趣味のこと、日々のこと

Reactorを理解する

Reactorを理解したい

ことの発端

「新規開発しましょう。」「Javaでよいですよ。」「任せるから好きに作ってね。」 からの - Spring 5以降なのでRestTemplateがメンテンナンスモードになっており、WebClientが推奨されている※1 - リアクティブプログラミングなんもわからん

※1: RestTemplateのJavadocを参照

spring.pleiades.io

最終的にやりたいこと

  • WebClientを使用してSpringBootアプリケーションからAPIの呼び出しを行い処理がしたい
  • デプロイ先はTomcatなので、アプリそのものはSpringWebFluxではなく、SpringMVCで実装※2

※2: 「SpringWebFluxはNetty使ってね。Tomcatでは動かないよ。」的な

spring.pleiades.io

↓こういうことも書いてあるからやりようはあるのかもしれないけども…

spring.pleiades.io

参考

qiita.com

speakerdeck.com

github.com

projectreactor.io

www.alpha.co.jp

以下、理解のためのメモ

『Reactive Streams 入門 #jjug』にて

2015のスライドで古いけど、基本的な考えを押さえていると思います。
個人的には理解のベースとして大変役立ちました。

キーワード、かな

  1. "データフロー"を記述するためのプログラミングモデル
  2. "変更の伝播"をプログラマに代わって実行するランタイム

組み合わせ可能(composable)

関数同士の組み合わせでデータのフローを作る、と理解

Future/Promise ~略~ データフローはあるが変更の伝播はない

そうなんだ!?

『reactive-streams』のREADMEにて

これはリアクティブプログラミングのための仕様であり、インタフェース。
詳細に理解する必要はあまりないように感じる(なぜなら普段使うのは実装されたSpringのReactorだから)。
おおよその理解をしておいて、実装のドキュメントで理解しきれなかったら改めて参照する、でよいかも?

  • Publisher

    • Google翻訳に突っ込むと『出版社』になる。 publish -er で「出す者」 程度の方がいいかな?
  • Subscriber

    • Google翻訳に突っ込むと『購入者』『加入者』などになる。

パブリッシャーは、サブスクライバーから受け取った要求に従ってそれらをパブリッシュする、潜在的に無限の数のシーケンスされた要素のプロバイダーです。

Google翻訳 データの受け側の処理能力による制限をうけるから、PublisherはSubscriber側の許可を得ながらデータを渡すイメージかな。

『PROJECT REACTOR』のハンズオンにて

FluxとMono

  • Reactive StreamsのPublisherである
  • Fluxは0~n個のonNextイベントを持ち、Monoはひとつ

参考: Javadoc projectreactor.io projectreactor.io

The recommended way to learn about the Flux API and discover new operators is through the reference documentation, rather than through this javadoc (as opposed to learning more about individual operators). See the "which operator do I need?" appendix.

ということでこれ↓も

projectreactor.io

公式のハンズオン解答例

github.com

こちらのsolutionブランチを参照。

アルファシステムズさんのブログは……

またあとで……