doc: 阅读spring reactor文档

This commit is contained in:
asahi
2025-03-21 00:33:06 +08:00
parent 2a4931ac51
commit 44763e6487

View File

@@ -34,3 +34,26 @@ reactor提供了复杂的“组合”选项能够反映抽象异步进程的
#### backpressure #### backpressure
`传递到上游的信号`该机制也被用于实现backpressure在assembly line模型中也被描述为workstation传递给上游的反馈信号当workstation处理消息比上游workstation满时会发送该反馈。 `传递到上游的信号`该机制也被用于实现backpressure在assembly line模型中也被描述为workstation传递给上游的反馈信号当workstation处理消息比上游workstation满时会发送该反馈。
reactive stream定义的机制接近于上述描述其提供两种模式
- unbounded modesource publisher可以按其最高速率不受限制的推送数据
- request mode通过`request`机制向source publisher发送信号告知其准备好处理最多`n`个元素。
中间的operator也可以在传输过程中对请求做出修改例如`buffer` operator可以将elements分割为以10个为单位的batch如果subscriber请求一个buffer那么上游source publisher可以产生10个元素。
通过backpressure可以将`push`模型转化为`push-pull`模型:
- 当上游的n个元素已经准备好时下游可以从上游拉取n个元素
- 当上有没有准备好n个元素时后续如果n个元素被准备好其将会被上游推送
#### hot & cold
对于响应式序列,其可以分为两种:
- cold sequence对于cold sequence会为每个订阅者重新开始流程包括source publisher。例如source中若封装了http调用会为每个subscriber都执行一个新的http请求
- hot sequencesubscriber只有在其订阅后才收到信号即使没有subscriber在监听hot sequence仍然能够发送signal
## Reactor Core
reactor引入了两个实现`Publisher`的类:`Mono``Flux`
- Flux代表包含`0...N`个items的reactive sequence
- Mono代表包含`0...1`个items的reactive sequence
上述两个类代表了在异步处理场景中的大致基数。
- Mono例如对于http请求的场景一个请求只会产生一个响应故而对响应执行`count`操作并没有任何意义。此时,可以通过`Mono<HttpResponse>`来代表http调用的结果`Mono`中只提供了上下文中包含`0...1`个元素的对应操作
- 当执行某些`可能会改变异步处理中最大基数的操作`时,可能会导致类型的改变,例如执行`Flux`中的`count`操作将会返回`Mono<Long>`的类型