doc: 阅读spring reactor文档
This commit is contained in:
@@ -34,3 +34,26 @@ reactor提供了复杂的“组合”选项,能够反映抽象异步进程的
|
|||||||
#### backpressure
|
#### backpressure
|
||||||
`传递到上游的信号`该机制也被用于实现backpressure,在assembly line模型中,也被描述为workstation传递给上游的反馈信号,当workstation处理消息比上游workstation满时,会发送该反馈。
|
`传递到上游的信号`该机制也被用于实现backpressure,在assembly line模型中,也被描述为workstation传递给上游的反馈信号,当workstation处理消息比上游workstation满时,会发送该反馈。
|
||||||
|
|
||||||
|
reactive stream定义的机制接近于上述描述,其提供两种模式:
|
||||||
|
- unbounded mode:source 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 sequence:subscriber只有在其订阅后才收到信号,即使没有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>`的类型
|
||||||
Reference in New Issue
Block a user