Spring Reactor 响应式编程: 如何使用Mono?

Spring 响应式编程

近些日子在学习有关spring-boot 3 的 新feature ,才了解到除常用的阻塞制servlet外,spring 使用了响应式框架reactor支持的响应式web 编程 , 较之原来的编程方式 ,我个人更加喜欢这种类lamdba 的流式 api,接下来就将会逐章介绍。

什么是 Mono?

在 Spring Reactor 中,Mono 是一个关键的类,用于表示包含零个或一个元素的异步计算。它是响应式编程的基本构建块之一,类似于 Java 8 中的 CompletableFuture,但提供了更丰富的功能和操作符。

创建和使用 Mono

创建 Mono

要创建一个 Mono 对象,可以使用 Mono 类中的静态方法,例如 Mono.just()Mono.empty()。下面是一些示例:

Mono<String> monoWithJust = Mono.just("Hello, world!");

使用操作符处理 Mono

Mono 提供了丰富的操作符来处理数据流。以下是一些常用的操作符及其示例:

  • map: 转换 Mono 中的值。
Mono<String> mono = Mono.just("Hello") .map(s -> s + ", world!");
  • flatMap: 处理嵌套的 Mono。
Mono<String> mono = Mono.just("Hello") .flatMap(s -> Mono.just(s.toUpperCase()));
  • filter: 过滤 Mono 中的值。
Mono<Integer> mono = Mono.just(5) .filter(num -> num > 0);
  • defaultIfEmpty: 在 Mono 为空时提供默认值

Mono<String> mono = Mono.empty() .defaultIfEmpty("Default Value");

 
  • onErrorResume: 处理错误并返回备用值。
Mono<String> mono = Mono.error(new RuntimeException("Error occurred")) .onErrorResume(error -> Mono.just("Recovered from error"));

示例

以下是一个使用 Mono 的完整示例,演示了如何进行异步操作:

Mono<String> mono = Mono.just("Hello") .map(s -> s + ", world!") .flatMap(s -> Mono.just(s.toUpperCase())); mono.subscribe(System.out::println);
posted @ 2024-04-12 15:32  怦怦On  阅读(159)  评论(0编辑  收藏  举报