projectreactor.iodocscorereleasereference(项目反应器)。 文件显示了对 BaseSubscriber
作为在订阅中使用lambdas的替代方案,然而通过阅读参考文档。BaseSubscriber 我看不出覆盖任何一个钩子能达到什么效果,而覆盖了 Subscriber
基方法则不会。为什么我们要使用 BaseSubscriber
根本没有?
BaseSubscriber
中实现了记账和看守。Subscriber
方法,这样你就不必再写那个锅炉模板,也不必担心锅炉模板是正确的,涵盖了所有的基础(例如,在 onNext
onSubscribe
等,并将上述例外情况转化为:。onError
信号)。)
请注意,当你使用基于lambda的版本的 Flux#subscribe
它创造了一个非常相似的 LambdaSubscriber
用同样的模板。
那么在这两种情况下,作为开发者的你就只剩下实现业务逻辑了。在一种情况下,是通过提供的lambdas来实现,而在另一种情况下,是通过 BaseSubscriber
通过实施 hookXxx
方法。
lambda方法与的主要区别是。BaseSubscriber
一个是在lambdas中,你不能访问lambda的输入参数以外的状态。有了 BaseSubscriber
,我们特别抓住了 Subscription
和钩子方法可以 cancel()
或 request(n)
该订阅。
在您需要更多控制流的情况下,它将非常有用。例如 BaseSubscriber
是一个 Disposable
它让你 处置 的 Subscription
并产生 onCancel
事件。它还实现了 Subscription
可以让你限制 请求 如果subscriber请求放慢速度或使其在运行中不受约束。
如果你觉得这些概念难以理解,那么我建议你看看Java中的继承和多态。
EDIT:
onSubscribe()
会捕获冒泡的异常,如果捕获到异常,会生成错误事件。的用例。hookOnSubscribe
是当你不想覆盖默认的异常机制,但仍然需要在订阅事件生成后写一些代码,那么你可以使用 hookOnSubscribe
. 当覆盖 hookOnSubscribe
,记得打电话 subscription.request(somebound)