在 spring Reactor 中使用 BaseSubscriber 钩子与 Subscriber 方法有什么好处?

What are the benefits of using BaseSubscriber hooks vs Subscriber methods in spring Reactor?

projectreactor.io/docs/core/release/reference documentation shows an implementation of BaseSubscriber as an alternative to using lambdas in a subscription, however by reading the reference docs: BaseSubscriber 我看不出重写任何钩子如何实现重写 Subscriber 基本方法无法做到的任何事情。我们为什么要使用 BaseSubscriber

BaseSubscriberSubscriber 方法中实现簿记和守卫,因此您不必编写样板文件并担心样板文件是否正确/覆盖所有基础(例如,防止异常在 onNext/onSubscribe/etc... 并将所述异常翻译成 onError 信号)。

请注意,当您使用 Flux#subscribe 的基于 lambda 的版本时,它会创建一个非常相似的 LambdaSubscriber 和相同类型的样板文件。

那么在这两种情况下,您作为开发人员只剩下实现业务逻辑了。在一种情况下,它是通过提供的 lambda 表达式实现的,在 BaseSubscriber 的情况下,它是通过实现 hookXxx 方法实现的。

lambda 方法与 BaseSubscriber 方法之间的主要区别在于,在 lambda 中,除了 lambda 的输入参数之外,您无法访问其他状态。使用 BaseSubscriber,我们专门捕获 Subscription 并且钩子方法可以 cancel()request(n) 该订阅。