doc: 阅读project reactor关于sinks的文档

This commit is contained in:
asahi
2025-04-16 12:54:44 +08:00
parent 0822e5052f
commit 2764227a0e

View File

@@ -70,6 +70,7 @@
- [在多线程环境下安全的使用`Sinks.One`和`Sinks.Many`](#在多线程环境下安全的使用sinksone和sinksmany)
- [`tryEmit` \& `emit`](#tryemit--emit)
- [Processor](#processor)
- [`asFlux`和`asMono`](#asflux和asmono)
>>>>>>> 8d41980 (doc: 阅读transient errors文档)
# Reactor
@@ -1100,8 +1101,23 @@ EmitResult result = replaySink.tryEmitNext(4);
> 在使用`EmitFailureHandler.busyLooping`时,其返回的示例包含状态,并不能被重用
#### `asFlux`和`asMono`
`Sinks.Many`支持被转化为`Flux`,下游可以对`Sinks.Many`转化后的`Flux`进行订阅,实例如下所示:
```java
Flux<Integer> fluxView = replaySink.asFlux();
fluxView
.takeWhile(i -> i < 10)
.log()
.blockLast();
```
同样的,`Sinks.One`和`Sinks.Empty`可以通过`asMono()`方法被转化为`Mono`
Sinks的类别包括
- `many().multicast()`sink只会基于subscribers的backpressure请求`将最新的数据传递到其subscribers`
- `最新的数据`代表`subscriber`订阅之后的数据
- `many().unicast()`:和`many().multicast()`类似,也是在订阅之后将`最新的数据`推送给订阅者,但是和`many().multicast()`不同之处如下:
- `many().unicast()`带有缓冲区,在第一个订阅者订阅`many().unicast()`之前,会将推送给`many().unicast()`的数据都缓冲到缓冲区中,待后续有订阅者订阅后,会将缓冲区数据发送给订阅者
- `many().multicast()`默认不带有缓冲区