私は Spring Tips:Functional Reactive Endpoints with Spring Framework 5. を見て、Spring Reactorについて少し読みましたが、完全には理解できません。
ネッティとスプリングリアクターをアクティブにした場合、エンドポイントにdtoオブジェクト(jacksonified)をストレートアップする代わりに、Flux
/Mono
インスタンス(jacksonified)を返す利点は何ですか?私は最初、リアクティブストリームはhttp要求/応答コンテキストでは、サーバーがオープンチャネルでデータをレシーバーにプッシュするWebソケットのように機能すると想定していましたが、そうではありません。
また、nettyはtomcatよりもリアクティブプログラミングで実際に何が優れていますか?
これらの質問が馬鹿げているように見えて申し訳ありませんが、この新しいフレームワークの方向性の目的がよくわかりません。なぜそれが生まれたのですか、それはどのように機能し、どのような問題を解決しますか?
最近発表されたDevoxxベルギー "Spring 5を備えたリアクティブWebアプリケーション" by Rossen Stoyanchev をご覧になることを強くお勧めします。
そこでは、表面上のReactive Web Controller(以下に表示)がSpring MVC HTTPサーブレットのように見える方法について話します要求/応答コントローラーですが、実際には
@GetMapping("/users/{id}")
public Mono<User> getUser(@PathValiable Long id) {
return this.userRepository.findById(id);
}
@GetMapping("/users")
public Flux<User> getUsers() {
return this.userRepository.findAll();
}
彼はServlet 3.1
ノンブロッキングは、完全にリアクティブな場合には真に機能せず、サーブレット3.1とリアクティブストリームを接続するグルーコードが、サーブレット3.1準拠のWebコンテナ(JettyとTomcat)のSpring 5の変更の一部として実装されています。
そしてもちろん、完全にリアクティブなノンブロッキング対応サーバー(Netty、Undertow)がリアクティブストリームを実行するためにサポートされていることに触れています。
NettyがTomcatよりも優れていることを意味するのは正しくありません。実装は異なります。 TomcatはJava NIOを使用してサーブレット3.1仕様を実装します。一方で、nettyもNIOを使用しますが、カスタムAPIを導入します。サーブレット3.1がNettyにどのように実装されているかについて洞察を得たい場合は、このビデオをご覧ください- https://youtu.be/uGXsnB2S_vc