Spring Boot 2によるリアクティブプログラミング。パート1


少し前に、最も人気のあるJavaフレームワークの新しいバージョンであるSpring Framework 5がリリースされました。 新しいバージョンは多くの新しいものをもたらしました。 最大の革新の1つは、リアクティブプログラミングモデルです。 Spring Boot 2は間もなくリリースされ、このアプローチによりマイクロサービスの作成が大幅に簡素化されます。

私のように、それが何であり、どのように使用されるかをより詳細に理解したい場合は、catへようこそ。 この記事は、理論と実用の2つの部分に分かれています。 次に、リアクティブになることの意味を理解しようとします。 その後、取得した知識を使用して、独自のマイクロサービスを作成します( パート2 )。

反応性とは何ですか?


まず、反応性の概念を検討します。 そして、ここですぐに定義を明確に区別する必要があります。

リアクティブシステム


リアクティブシステムは、特定のルールセット( リアクティブマニフェスト )を満たすアーキテクチャパターンです。 このマニフェストは、不確実性を排除するために2013年に開発されました。 事実、当時のヨーロッパとアメリカでは、「リアクティブ」という言葉は余りにも冗長でした。 誰もが自分のやり方で、どのシステムがリアクティブと呼ばれるかを理解していました。 これにより大きな混乱が生じ、結果として、リアクティブシステムの明確な基準を設定するマニフェストが作成されました。

マニフェストの画像を見て、各アイテムの意味をさらに詳しく分析してみましょう。

画像


リアクティブプログラミング


ウィキペディアによると、リアクティブプログラミングはデータフローに焦点を当てたプログラミングパラダイムです。 すぐに実際の動作を分析します。 しかし、最初に、このパラダイムが基づいているものを見てみましょう。

リアクティブプログラミングの基本概念は、ノンブロッキングI / Oに基づいています。 通常、特定のリソース(データベース、ディスク上のファイル、リモートサーバーなど)にアクセスすると、結果がすぐに(多​​くの場合同じ行で)取得されます。 リソースへの非ブロッキング呼び出しでは、スレッドは呼び出しで停止せず、実行を継続します。 結果は後で取得し、必要に応じて取得します。

練習する


いいね! それでは、 Javaでリアクティブプログラミングの実装を始めましょう。 唯一注意することは、 Spring WebFluxを使用することです 。 これは新しいリアクティブプログラミングフレームワークです。 問題は、 Springチームがこれらの目的でSpring Web MVCを使用しなかった理由は何ですか? 実際、このフレームワークのすべてのモジュールをリアクティブモードで使用できるわけではありません。 宣言型プログラミングとスレッドに基づく、 Tomcatなどの多くのコードとサードパーティライブラリが残っています。

フレームワークの作業中に、非同期作業の小さな仕様が開発されました。 後に彼らはこの仕様をJava 9に含めることにしました。しかし、簡単にするためにJava 8とSpring Boot 2を使用します。

基本的な概念


新しいアプローチでは、リアクティブモードで作業するための2つの主要なクラスがあります。


これらはすべて非常にシンプルで、リソース効率に優れています。 ストリームメソッドへの呼び出しを組み合わせたときに何が得られるか想像してみてください。

この記事では、 リアクティブシステムリアクティブプログラミングの概念を検証しました。 さらに、これらの概念がどのように関連しているかを理解しました。 次のパートでは、さらに進んで、知識に基づいてサービスを構築しようとします。

PS mail.ruからメッセージングシステムを分解すること提案します。 そのようなアプリケーションは、マニフェストに従ってメッセージシステムと呼ぶことができると思いますか? コメントにあなたの考えを書いてください。 とても興味深い。

Source: https://habr.com/ru/post/J342498/


All Articles