Java 9中Subscription接口的规则是什么?

一个订阅 可以由一个发布者和一个订阅者完全共享,以进行数据 交换。这就是为什么subscription ()方法不返回创建的Subscription而是返回void的原因。订阅仅通过onSubscribe()方法回调传递给订阅服务器。Subscription接口包含两个方法:request()cancel()

语法

public interface Subscription {
   public void request(long n);
   public void cancel();
}

订阅接口规则:

  • Subscription.request()Subscription.cancel()方法必须仅在其Subscriber上下文内调用。

  • 订阅必须允许订阅者从onNext()onSubscribe()方法内部同步调用Subscription.request ()方法。

  • Subscription.request()方法必须在Publisher Subscriber之间可能的同步递归上设置一个上限。

  • Subscription.request()方法应通过及时返回来尊重其调用者的响应能力。

  • Subscription.cancel()方法必须通过及时返回来尊重其调用者的响应能力,并且必须是线程安全的

  • 虽然没有取消 订阅,但是Subscription.request(long n)方法必须注册给定数量的要生成给相应订阅者的其他元素。

  • 虽然未取消Subscription,但是如果参数<= 0 ,Subscription.request(long n) 方法必须使用IllegalArgumentException 调用onError()方法。

  • 虽然没有取消订阅,但是Subscription.request(long n)方法可以在此订阅者或其他订阅者上同步调用onNext()方法。

  • 虽然没有取消订阅,但是Subscription.request(long n)方法可以在此订阅者或其他订阅者上同步调用onComplete()onError()方法。

  • 如果未取消订阅,则Subscription.cancel()方法必须请求发布者停止发信号通知其订阅者。不需要执行该操作即可立即影响订阅。

  • 如果未取消订阅,则Subscription.cancel()方法必须请求发布者删除对相应订阅者的任何引用。

  • 调用Subscription.cancel()Subscription.request()方法必须正常返回。

  • 订阅必须支持无限数量的呼叫以请求和支持最大2 ^ 63-1的请求。 如果需求等于或大于2 ^ 63-1,发布者可以认为该需求实际上是不受限制的。