第5章 Eclipse Vert.x で Spring Boot を使用したリアクティブアプリケーションの開発

注記

Spring Boot の Eclipse Vert.x リアクティブコンポーネントは、テクノロジープレビュー として提供されます。

本セクションでは、Spring Boot および Eclipse Vert.x をベースとした Spring Boot スターターを使用して、リアクティブでアプリケーションを開発する方法を説明します。以下の例は、スターターを使用してリアクティブアプリケーションを作成する方法を表しています。

5.1. Eclipse Vert.x での Spring Boot の概要

Spring リアクティブスタックは Project Reactor 上に構築され、バックプレーシャーを実装し、Reactive Streams 仕様に準拠しています。非同期イベントストリーム処理を有効にする Flux および Mono 機能 API タイプを提供します。

Spring は、Project Reactor の上部に WebFlux (非同期イベント駆動型の Web アプリケーションフレームワーク) を提供します。WebFlux は、主に Reactor Netty と連携するように設計されていますが、Eclipse Vert.x などの他のリアクティブ HTTP サーバーでも操作できます。

Spring WebFlux および Reactor を使用すると、以下のアプリケーションを作成できます。

  • ブロックなし: アプリケーションは、現在の要求の完了に必要なリモートコンポーネントまたはサービスからの応答を待機しているときに、追加の要求を引き続き処理します。
  • 非同期: アプリケーションは応答イベントを生成し、それらをアプリケーション内の他のクライアントが取得できるイベントストリームに再び公開することで、イベントストリームからイベントに応答します。
  • イベント駆動型: アプリケーションは、マウスクリック、HTTP 要求、ストレージに追加される新しいファイルなど、ユーザーまたは別のサービスが生成するイベントに応答します。
  • スケーラブル: アプリケーションの必要なイベント処理容量のみに一致する Publisher または Subscriber の数が増えると、アプリケーションの個別クライアント間のルーティング要求の複雑性が向上します。リアクティブアプリケーションは、他のアプリケーションプログラミングモデルと比較して、コンピューティングおよびネットワークリソースを使用して多数のイベントを処理できます。
  • 耐久性: アプリケーションは、サービス全体に影響を与えることなく、依存するサービス障害を処理できます。

Spring WebFlux を使用する追加の利点には以下が含まれます。

SpringMVC での類似性
SpringMVC API タイプと WebFlux API タイプは類似しており、開発者は SpringMVC の知識を WebFlux を使用したプログラミングアプリケーションに簡単に適用できます。

Red Hat による Spring Reactive 製品は、Reactor と WebFlux から OpenShift とスタンドアロンの RHEL の利点を提供し、WebFLux フレームワークの Eclipse Vert.x 拡張のセットを導入します。これにより、Spring Boot の抽象化および高速なプロトタイプ機能を保持でき、アプリケーション内のサービス間のネットワーク通信を完全にリアクティブで処理する非同期 IO API を利用できます。

アノテーション付きコントローラーのサポート
WebFlux は、SpringMVC により導入されるエンドポイントコントローラーアノテーションを保持します (SpringMVC および WebFlux はリアクティブな RxJava2 および Reactor の戻り値タイプ)。
機能的なプログラミングサポート
Reactor の Java 8 Functional API とだけでなく、CompletablebFuture API、および Stream API とも相互作用します。アノテーションベースのエンドポイントに加えて、WebFlux は機能的なエンドポイントもサポートします。

その他のリソース

Spring Reactive スタックの一部であるテクノロジーの実装に関する詳細は、以下のリソースを参照してください。