Gho*_*ica 11 java reactive-programming java-9
我找到了一篇关于FlowJava9中新相关接口的文章.那里的示例代码:
public class MySubscriber<T> implements Subscriber<T> {
private Subscription subscription;
@Override
public void onSubscribe(Subscription subscription) {
this.subscription = subscription;
subscription.request(1); //a value of Long.MAX_VALUE may be considered as effectively unbounded
}
@Override
public void onNext(T item) {
System.out.println("Got : " + item);
subscription.request(1); //a value of Long.MAX_VALUE may be considered as effectively unbounded
}
Run Code Online (Sandbox Code Playgroud)
如您所见,onNext()请求推送一个新项目.
现在我想知道:
onSubscribe()要求,说5项request(1)如上所述调用现在服务器是否应该发送
换句话说:当request()多次调用时,这些数字会加起来; 或以前的请求"被丢弃"?
导致问题标题 - 订户是否需要跟踪收到的项目,以避免在某些时候请求"太多"项目.
正如Sotirios 指出的那样,该request方法的Javadoc声明(强调我的):
将给定数量
n的项目添加到此订阅的当前未履行需求中.如果n小于或等于零,则订阅服务器将收到带有IllegalArgumentException参数的onError信号.否则,订阅者将接收最多n额外的onNext调用(如果终止则更少).
所以答案显然是肯定的,订户需要跟踪项目.事实上,这就是机制的重点.一些背景:该request方法旨在允许订户应用背压,通知上游组件它过载并"需要中断".因此,订户(并且仅)其任务是仔细审查何时以及请求多少新项目.在该行中,它不能"重新考虑"并减少要接收的项目数量.
降低数量也会使发布者和订阅者之间的通信"非单调",因为完全请求的项目数量可能突然降低(因为它只能增加).这不仅在抽象意义上令人烦恼,而且还带来了具体的一致性问题:当订阅者突然将请求的项目数量减少到1时,发布者可能正在提供一些项目 - 现在是什么?
| 归档时间: |
|
| 查看次数: |
288 次 |
| 最近记录: |