5.8. リアクティブ Spring Boot アプリケーションでのサーバー送信イベントの使用
HTTP リクエストを受け入れ、サーバー送信イベント (SSE) のストリームを返す単純なサービスを作成します。クライアントがサーバーへの接続を確立し、ストリーミングを開始すると、接続は開いたままになります。サーバーは接続を再利用して、新しいイベントをクライアントに継続的にプッシュします。リクエストをキャンセルすると、接続が閉じられてストリームが停止し、クライアントがサーバーの更新フォームの受信を停止させます。
前提条件
- JDK 8 または JDK 11 がインストールされている。
- Maven がインストールされている。
- Spring Boot を使用するよう設定されたMaven ベースのアプリケーションプロジェクト
手順
vertx-spring-boot-starter-http
をプロジェクトのpom.xml
ファイルに依存関係として追加します。pom.xml
<project> ... <dependencies> ... <dependency> <groupId>dev.snowdrop</groupId> <artifactId>vertx-spring-boot-starter-http</artifactId> </dependency> ... <dependencies> ... </project>
アプリケーションのメインクラスを作成します。
SseExampleApplication.java
package dev.snowdrop.vertx.sample.sse; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class SseSampleApplication { public static void main(String[] args) { SpringApplication.run(SseSampleApplication.class, args); } }
アプリケーションのサーバー送信イベントコントローラークラスを作成します。この例では、クラスはランダムな整数のストリームを生成し、それらをターミナルアプリケーションに出力します。
SseController.java
package dev.snowdrop.vertx.sample.sse; import java.time.Duration; import java.util.Random; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import reactor.core.publisher.Flux; @RestController public class SseController { @GetMapping(produces = MediaType.TEXT_EVENT_STREAM_VALUE) public Flux<Integer> getRandomNumberStream() { Random random = new Random(); return Flux.interval(Duration.ofSeconds(1)) .map(i -> random.nextInt()) .log(); } }
オプション: アプリケーションをローカルで実行し、テストします。
Maven プロジェクトのルートディレクトリーへ移動します。
$ cd myApp
アプリケーションをパッケージ化します。
$ mvn clean package
コマンドラインからアプリケーションを起動します。
$ java -jar target/vertx-spring-boot-sample-sse.jar
新しいターミナルウィンドウで、HTTP 要求を
localhost
に発行します。サーバーから送信されたイベントコントローラーからランダムな整数の連続ストリームの受信を開始します。$ curl localhost:8080 data:-2126721954 data:-573499422 data:1404187823 data:1338766210 data:-666543077 ...
Ctrl
+C
を押して HTTP 要求をキャンセルし、応答のストリームを終了します。
その他のリソース
- Fabric8 Maven プラグインを使用して、アプリケーションを OpenShift クラスターにデプロイ できます。
- また、スタンドアロンの Red Hat Enterprise Linux でのデプロイメント 用にアプリケーションを設定することもできます。