在进行第二个demo之前。先来讲解一下reactive-streams官网中有关Subscriber的一些规则。这里将基于第一篇reactor博客中的demo进行讲解。demo1。
public interface Subscriber<T> {
public void onSubscribe(Subscription s);
public void onNext(T t);
public void onError(Throwable t);
public void onComplete();
}
Subscriber规则
-
订阅者必须通过Subscription.request(long n)发信号通知需要接收onNext信号。
此规则的目的是确定订阅者有责任决定它能够和愿意接收的元素的时间和数量。为了避免由重入的订阅方法引起的信号重新排序,强烈建议同步订阅服务器实现在任何信号处理的最后调用订阅方法。建议订阅者请求他们能够处理的上限,因为一次只请求一个元素会导致本身效率低下的“停止等待”协议。
代码1 LambdaSubscriber类@Override public final void onSubscribe(Subscription s) { //这里是对重入做了验证,当前订阅不为空则取消新订阅并返回false if (Operators.validate(subscription, s)) { this.subscription = s; if (subscriptionConsumer != null) { try { subscriptionConsumer.accept(s); } catch (Throwable t) { Exceptions.throwIfFatal(t); s.cancel()