From 2764227a0e554cda5ddfa68de0cac1cc51152656 Mon Sep 17 00:00:00 2001 From: asahi Date: Wed, 16 Apr 2025 12:54:44 +0800 Subject: [PATCH] =?UTF-8?q?doc:=20=E9=98=85=E8=AF=BBproject=20reactor?= =?UTF-8?q?=E5=85=B3=E4=BA=8Esinks=E7=9A=84=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- spring/webflux/Reactor.md | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/spring/webflux/Reactor.md b/spring/webflux/Reactor.md index 75e826d..65d5860 100644 --- a/spring/webflux/Reactor.md +++ b/spring/webflux/Reactor.md @@ -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 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()`默认不带有缓冲区