doc: 阅读Sinks文档

This commit is contained in:
asahi
2025-04-17 12:49:28 +08:00
parent 2764227a0e
commit c6be75ec7a

View File

@@ -71,6 +71,9 @@
- [`tryEmit` \& `emit`](#tryemit--emit)
- [Processor](#processor)
- [`asFlux`和`asMono`](#asflux和asmono)
- [`Sinks.many().unicast().onBackpressureBuffer(args?)`](#sinksmanyunicastonbackpressurebufferargs)
- [onBackpressureBuffer](#onbackpressurebuffer)
- [Sinks.many().multicast().onBackpressureBuffer(args?)](#sinksmanymulticastonbackpressurebufferargs)
>>>>>>> 8d41980 (doc: 阅读transient errors文档)
# Reactor
@@ -1118,8 +1121,24 @@ Sinks的类别包括
- `many().unicast()`:和`many().multicast()`类似,也是在订阅之后将`最新的数据`推送给订阅者,但是和`many().multicast()`不同之处如下:
- `many().unicast()`带有缓冲区,在第一个订阅者订阅`many().unicast()`之前,会将推送给`many().unicast()`的数据都缓冲到缓冲区中,待后续有订阅者订阅后,会将缓冲区数据发送给订阅者
- `many().multicast()`默认不带有缓冲区
- `many().replay()`: 对于新订阅的订阅者,会将一定数量的`pushed history data`进行`replay`操作,之后再推送新的数据
- `one()`sink只会向subscriberr推送一个数据
- `empty()`该sink会向subscriber推送`termianl signal`error或complete
#### `Sinks.many().unicast().onBackpressureBuffer(args?)`
一个`unicast Sinks.Many`可以通过其内置buffer处理backpressure但是其最多只能有一个subscriber。
通常,可以通过`Sinks.many().unicast().onBackpressureBuffer()`来创建`unicast sink`。但是,`Sinks.many().unicast()`中包含更多的静态方法,可以对其进行更精细的调整。
##### onBackpressureBuffer
在默认情况下,`onBackpressureBuffer()`其是无界unbounded
- 在subscriber尚未请求数据的情况下如果通过sink推送了数据那么这些数据都会被缓冲到缓冲区中缓冲区是无界的
故而,`onBackPressureBuffer`方法存在一个接收`Queue`类型参数的重载方法。可以向其传递一个有界队列,该队列将会被用作内部缓冲区。
> 在为`onBackpressureBuffer`指定了`Queue`的情况下,如果`queue已满并且下游并没有向上游发送足够的reqeust`时,`sink将会拒绝该value的推送`。
#### Sinks.many().multicast().onBackpressureBuffer(args?)