doc: 阅读reactor文档

This commit is contained in:
asahi
2025-03-21 12:56:59 +08:00
parent 44763e6487
commit fcf534828e
2 changed files with 17 additions and 1 deletions

View File

@@ -56,4 +56,20 @@ reactor引入了两个实现`Publisher`的类:`Mono`和`Flux`。
上述两个类代表了在异步处理场景中的大致基数。
- Mono例如对于http请求的场景一个请求只会产生一个响应故而对响应执行`count`操作并没有任何意义。此时,可以通过`Mono<HttpResponse>`来代表http调用的结果`Mono`中只提供了上下文中包含`0...1`个元素的对应操作
- 当执行某些`可能会改变异步处理中最大基数的操作`时,可能会导致类型的改变,例如执行`Flux`中的`count`操作将会返回`Mono<Long>`的类型
- 当执行某些`可能会改变异步处理中最大基数的操作`时,可能会导致类型的改变,例如执行`Flux`中的`count`操作将会返回`Mono<Long>`的类型
### Flux `0...n`
![alt text](image.png)
`Flux<T>`是一个标准的`Publisher<T>`,代表基数为`0...n`的异步序列,其可以被`completion signal`或异常所终止。根据reactive stream标准存在三种signal且信号会转化为对下游`onNext``onComplete``onError`的调用。
Flux是一个通用的reactive类型并且所有的event type都是可选的。
- 当没有`onNext`事件但是存在`onComplete`事件,代表一个空的有限序列
-`onNext``onComplete`事件都不存在时,代表一个空的无限序列
- 无限序列并不一定为空,例如`Flux.interval(Duration)`会产生一个`Flux<Long>`其是无限的并且发送tick
### Mono `0...1`
`Mono<T>`是一个标准的`Publisher<T>`,其通过`onNext`信号发送至多一个item然后通过`onComplete`信号结束(成功场景);或直接通过`onError`信号结束(失败场景)。
大多数Mono实现在调用完subscriber的`onNext`方法之后预计会立马调用subscriver的`onComplete`方法。但是,`Mono.never`是一个例外,其并不会发送任何信号,并且其`onNext``onError`的组合是被明确禁止的。