web-dev-qa-db-ja.com

HTTPエンドポイントがDTOではなくFlux / Monoインスタンスを返すことの利点

私は 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)がリアクティブストリームを実行するためにサポートされていることに触れています。

12
dimitrisli

NettyがTomcatよりも優れていることを意味するのは正しくありません。実装は異なります。 TomcatはJava NIOを使用してサーブレット3.1仕様を実装します。一方で、nettyもNIOを使用しますが、カスタムAPIを導入します。サーブレット3.1がNettyにどのように実装されているかについて洞察を得たい場合は、このビデオをご覧ください- https://youtu.be/uGXsnB2S_vc

2
Yevhenii Melnyk