Spring 5 WebFlux 单声道和 Flux
Spring 5 WebFlux Mono and Flux
在Spring5中我只知道SpringWebFlux Handler方法处理请求和returnsMono或Flux 作为回应。
@Component
public class HelloWorldHandler {
public Mono<ServerResponse> helloWorld(ServerRequest request) {
return ServerResponse.ok().contentType(MediaType.TEXT_PLAIN).body(BodyInserters.fromObject("Hello World"));
}
}
但我不知道 Mono 和 Flux 是什么意思,也不知道它们如何与 WebFlux 处理程序一起工作。
谁能简单解释一下
1.What 表示 Mono 和 Flux.
2.How 它与 WebFlux 处理程序一起工作。
提前致谢。
Webflux 完全是关于反应式编程的,简而言之,这意味着业务逻辑仅在处理它的数据可用时才执行(反应式)。
这意味着您不再可以 return 简单的 POJO,但您必须 return 其他东西,可以在可用时提供结果的东西。 reactive streams initiative, this is called a Publisher
内。 Publisher
有一个 subcribe()
方法,允许消费者在 POJO 可用时获取它。
一个Publisher
(例如Publisher<Foo>
)可以return 零个或多个,可能是无限的结果。为了更清楚地说明您可以期待多少结果,Project Reactor(Pivotal 的反应流实现)引入了 Publisher
的两个实现:
因此,基本上您可以将 Mono<Foo>
视为 return 的反应对应物 Foo
,将 Flux<Foo>
视为 Collection<Foo>
的反应对应物。
例如:
Flux
.just(1, 2, 3, 4)
.map(nr -> nr * 2)
.subscribe(System.out::println);
尽管数字已经可用(您可以看到它们),但您应该意识到,由于它是 Flux
,它们是一个一个发出的。在其他情况下,这些数字可能来自外部 API,在这种情况下,它们不会立即可用。
下一阶段(map
运算符)将在检索到一个数字后立即将数字相乘,这意味着它也会一个一个地进行此映射,然后发出新值。
最终,有一个订阅者(应该总是有一个,但它可能是订阅的 Spring 框架本身),在这种情况下,它将打印它获得的每个值并将其打印到控制台,也,一一
您还应该意识到,处理这些项目时没有特定的顺序。可能是第一个数字已经打印在控制台上,而第三个数字还没有乘以二。
因此,在您的情况下,您有一个 Mono<ServerResponse>
,这意味着只要 ServerResponse
可用,WebFlux 框架就可以使用它。由于预期只有一个 ServerResponse
,因此它是 Mono
而不是 Flux
。
在Spring5中我只知道SpringWebFlux Handler方法处理请求和returnsMono或Flux 作为回应。
@Component
public class HelloWorldHandler {
public Mono<ServerResponse> helloWorld(ServerRequest request) {
return ServerResponse.ok().contentType(MediaType.TEXT_PLAIN).body(BodyInserters.fromObject("Hello World"));
}
}
但我不知道 Mono 和 Flux 是什么意思,也不知道它们如何与 WebFlux 处理程序一起工作。
谁能简单解释一下
1.What 表示 Mono 和 Flux.
2.How 它与 WebFlux 处理程序一起工作。
提前致谢。
Webflux 完全是关于反应式编程的,简而言之,这意味着业务逻辑仅在处理它的数据可用时才执行(反应式)。
这意味着您不再可以 return 简单的 POJO,但您必须 return 其他东西,可以在可用时提供结果的东西。 reactive streams initiative, this is called a Publisher
内。 Publisher
有一个 subcribe()
方法,允许消费者在 POJO 可用时获取它。
一个Publisher
(例如Publisher<Foo>
)可以return 零个或多个,可能是无限的结果。为了更清楚地说明您可以期待多少结果,Project Reactor(Pivotal 的反应流实现)引入了 Publisher
的两个实现:
因此,基本上您可以将 Mono<Foo>
视为 return 的反应对应物 Foo
,将 Flux<Foo>
视为 Collection<Foo>
的反应对应物。
例如:
Flux
.just(1, 2, 3, 4)
.map(nr -> nr * 2)
.subscribe(System.out::println);
尽管数字已经可用(您可以看到它们),但您应该意识到,由于它是 Flux
,它们是一个一个发出的。在其他情况下,这些数字可能来自外部 API,在这种情况下,它们不会立即可用。
下一阶段(map
运算符)将在检索到一个数字后立即将数字相乘,这意味着它也会一个一个地进行此映射,然后发出新值。
最终,有一个订阅者(应该总是有一个,但它可能是订阅的 Spring 框架本身),在这种情况下,它将打印它获得的每个值并将其打印到控制台,也,一一
您还应该意识到,处理这些项目时没有特定的顺序。可能是第一个数字已经打印在控制台上,而第三个数字还没有乘以二。
因此,在您的情况下,您有一个 Mono<ServerResponse>
,这意味着只要 ServerResponse
可用,WebFlux 框架就可以使用它。由于预期只有一个 ServerResponse
,因此它是 Mono
而不是 Flux
。