反応性シーケンスのログ記録

1概要

Spring WebFlux の導入により、リアクティブでノンブロッキングなアプリケーションを書くためのもう一つの強力なツールを手に入れました。このテクノロジを使用することは以前よりもずっと簡単になりましたが、Spring WebFluxで反応シーケンスをデバッグすることは非常に面倒なことがあります。

このクイックチュートリアルでは、非同期シーケンスでイベントを簡単に記録する方法と、簡単な間違いを回避する方法について説明します。

2 Mavenの依存関係

Spring WebFluxの依存関係をプロジェクトに追加して、リアクティブストリームを作成できるようにします。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-webflux</artifactId>
</dependency>

最新のhttps://search.maven.org/classic/#search%7Cgav%7C1%7Cg%3A%22org.springframework.boot%22%20AND%20a%3A%22spring-boot-starter-webflux%を入手することができます。 Maven Centralからの22[ spring-boot-starter-webflux ]依存関係。

3リアクティブストリームの作成

まずは Flux を使ってリアクティブストリームを作成し、 __ log()メソッドを使ってロギングを有効にしましょう:

Flux<Integer> reactiveStream = Flux.range(1, 5).log();

次に、生成された値を消費するためにそれを購読します。

reactiveStream.subscribe();

4リアクティブストリームのロギング

上記のアプリケーションを実行した後、我々はロガーが動作しているのを見ます:

2018-11-11 22:37:04 INFO | onSubscribe([Synchronous Fuseable]FluxRange.RangeSubscription)
2018-11-11 22:37:04 INFO | request(unbounded)
2018-11-11 22:37:04 INFO | onNext(1)
2018-11-11 22:37:04 INFO | onNext(2)
2018-11-11 22:37:04 INFO | onNext(3)
2018-11-11 22:37:04 INFO | onNext(4)
2018-11-11 22:37:04 INFO | onNext(5)
2018-11-11 22:37:04 INFO | onComplete()

私達は私達の流れで起こったあらゆる出来事を見ます。 5つの値が発行され、 onComplete() イベントでストリームクローズされました。

5高度なログ記録シナリオ

もっと面白いシナリオを見るためにアプリケーションを修正することができます。 take() Flux に追加しましょう。これはストリームに特定の数のイベントだけを提供するよう指示します。

Flux<Integer> reactiveStream = Flux.range(1, 5).log().take(3);

コードを実行すると、次のような出力が表示されます。

2018-11-11 22:45:35 INFO | onSubscribe([Synchronous Fuseable]FluxRange.RangeSubscription)
2018-11-11 22:45:35 INFO | request(unbounded)
2018-11-11 22:45:35 INFO | onNext(1)
2018-11-11 22:45:35 INFO | onNext(2)
2018-11-11 22:45:35 INFO | onNext(3)
2018-11-11 22:45:35 INFO | cancel()

ご覧のとおり、 take() によって3つのイベントが発生した後にストリームがキャンセルされました。

  • あなたのストリームの中の log() の配置は非常に重要です** 。 take() の後に log() を配置した場合の出力が異なることを確認しましょう。

Flux<Integer> reactiveStream = Flux.range(1, 5).take(3).log();

そして出力:

2018-11-11 22:49:23 INFO | onSubscribe([Fuseable]FluxTake.TakeFuseableSubscriber)
2018-11-11 22:49:23 INFO | request(unbounded)
2018-11-11 22:49:23 INFO | onNext(1)
2018-11-11 22:49:23 INFO | onNext(2)
2018-11-11 22:49:23 INFO | onNext(3)
2018-11-11 22:49:23 INFO | onComplete()

見ての通り、観測点を変えると出力が変わった。これでストリームは3つのイベントを生成しましたが、 cancel()の代わりに onComplete() が表示されます。これは、このメソッドで要求されたものの代わりに __take()を使用した場合の出力を観察したためです。

6. 結論

このクイック記事では、組み込みの log() メソッドを使用してリアクティブストリームを記録する方法を説明しました。

そしていつものように、上記の例のソースコードはhttps://github.com/eugenp/tutorials/tree/master/spring-5-reactive/src/main/java/com/baeldung/webflux/loggingにあります。 GitHubに