diff --git a/spring/webflux/Reactor.md b/spring/webflux/Reactor.md index 8e96348..a43a0a1 100644 --- a/spring/webflux/Reactor.md +++ b/spring/webflux/Reactor.md @@ -74,6 +74,8 @@ - [`Sinks.many().unicast().onBackpressureBuffer(args?)`](#sinksmanyunicastonbackpressurebufferargs) - [onBackpressureBuffer](#onbackpressurebuffer) - [Sinks.many().multicast().onBackpressureBuffer(args?)](#sinksmanymulticastonbackpressurebufferargs) + - [autoCancel](#autocancel) + - [Sinks.many().multicast().directAllOrNothing()](#sinksmanymulticastdirectallornothing) >>>>>>> 8d41980 (doc: 阅读transient errors文档) # Reactor @@ -1139,6 +1141,25 @@ Sinks的类别包括: > 在为`onBackpressureBuffer`指定了`Queue`的情况下,如果`queue已满并且下游并没有向上游发送足够的reqeust`时,`sink将会拒绝该value的推送`。 #### Sinks.many().multicast().onBackpressureBuffer(args?) +对于该方法创建的`multicast Sinks.Many`可以向多个subscribers发送数据,并且对每个subscriber都能独立地接收backpressure。 + +> 对于每个subscriber,只会接收在其subscribe之后推送到sink的signal + +基础的multicast sink可以通过`Sinks.many().multicast().onBackpresuureBuffer()`来进行创建。 + +##### autoCancel +在默认情况下,如果所有subscribers都被取消(`cancelled`),即取消订阅,其会对internal buffer进行清空,并且停止接收新的subscriber。 + +如果想要修改`autoCancel`的行为,可以调用`Sinks.many().multicast()`中的静态工厂方法,通过autoCancel参数来调整`autoCancel`的行为。 + +#### Sinks.many().multicast().directAllOrNothing() +该方法创建的拥有最简单的backpressure处理策略: +- 如果任何subscriber处于`too slow`状态(demand为0),那么对于所有的subscriber,该onNext都会被丢弃。 + +但是,slow subscribers并不会被终止,`一旦slow subscribers又发送了request`,所有subscribers都会重新从sinks.many接收数据。 + +在`Sinks.many()`终止后(通常是通过调用`emitError, emitComplete`方法),其仍然允许新的subscriber对其进行订阅,但是只会对新订阅者replay termination signal。 +