Sha*_*ika 5 spring java-8 spring-boot spring-webflux
在Spring 5中,我只知道Spring WebFlux Handler方法处理请求并返回Mono或Flux作为响应.
@Component
public class HelloWorldHandler {
public Mono<ServerResponse> helloWorld(ServerRequest request) {
return ServerResponse.ok().contentType(MediaType.TEXT_PLAIN).body(BodyInserters.fromObject("Hello World"));
}
}
Run Code Online (Sandbox Code Playgroud)
但我不知道Mono和Flux是什么意思,以及它如何与WebFlux Handler协同工作.
可以任何人简单解释一下
1.什么意思是Mono和Flux.
2.它如何与WebFlux处理程序一起使用.
提前致谢.
g00*_*00b 18
Webflux完全是关于反应式编程,总的来说,只有在处理数据时才能执行业务逻辑(反应性).
这意味着您不再能够返回简单的POJO,但您必须返回其他内容,这些内容可以在可用时提供结果.在反应流计划中,这被称为a Publisher.A Publisher有一种subcribe()方法可以让消费者在可用时获得POJO.
A Publisher(例如Publisher<Foo>)可以返回零或多个,可能是无限的结果.为了更清楚地说明您可以期待多少结果,Project Reactor(Pivotal的反应流实现)引入了两个实现Publisher:
因此,基本上你可以Mono<Foo>看作回归的反应对应物Foo和Flux<Foo>作为反应对应物Collection<Foo>.
例如:
Flux
.just(1, 2, 3, 4)
.map(nr -> nr * 2)
.subscribe(System.out::println);
Run Code Online (Sandbox Code Playgroud)
即使数字已经可用(你可以看到它们),你应该意识到,因为它是一个Flux,它们是一个接一个地发出的.在其他情况下,这些数字可能来自外部API,在这种情况下,它们不会立即可用.下一个阶段(map运算符)将在检索到一个数字后立即将该数字相乘,这意味着它也会逐个执行此映射,然后发出新值.
最终,有一个订阅者(应该总是有一个订阅者,但它可能是订阅的Spring框架本身),在这种情况下,它将打印它获得的每个值并将其打印到控制台,也是一个接一个.
您还应该意识到处理这些项目时没有特定的顺序.可能是第一个数字已经打印在控制台上,而第三个数字尚未乘以2.
因此,在您的情况下,您有一个Mono<ServerResponse>,这意味着一旦ServerResponse可用,WebFlux框架就可以使用它.因为只有一个ServerResponse预期,它是a Mono而不是a Flux.
| 归档时间: |
|
| 查看次数: |
5224 次 |
| 最近记录: |