在 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
?
BaseSubscriber
在 Subscriber
方法中实现簿记和守卫,因此您不必编写样板文件并担心样板文件是否正确/覆盖所有基础(例如,防止异常在 onNext
/onSubscribe
/etc... 并将所述异常翻译成 onError
信号)。
请注意,当您使用 Flux#subscribe
的基于 lambda 的版本时,它会创建一个非常相似的 LambdaSubscriber
和相同类型的样板文件。
那么在这两种情况下,您作为开发人员只剩下实现业务逻辑了。在一种情况下,它是通过提供的 lambda 表达式实现的,在 BaseSubscriber
的情况下,它是通过实现 hookXxx
方法实现的。
lambda 方法与 BaseSubscriber
方法之间的主要区别在于,在 lambda 中,除了 lambda 的输入参数之外,您无法访问其他状态。使用 BaseSubscriber
,我们专门捕获 Subscription
并且钩子方法可以 cancel()
或 request(n)
该订阅。
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
?
BaseSubscriber
在 Subscriber
方法中实现簿记和守卫,因此您不必编写样板文件并担心样板文件是否正确/覆盖所有基础(例如,防止异常在 onNext
/onSubscribe
/etc... 并将所述异常翻译成 onError
信号)。
请注意,当您使用 Flux#subscribe
的基于 lambda 的版本时,它会创建一个非常相似的 LambdaSubscriber
和相同类型的样板文件。
那么在这两种情况下,您作为开发人员只剩下实现业务逻辑了。在一种情况下,它是通过提供的 lambda 表达式实现的,在 BaseSubscriber
的情况下,它是通过实现 hookXxx
方法实现的。
lambda 方法与 BaseSubscriber
方法之间的主要区别在于,在 lambda 中,除了 lambda 的输入参数之外,您无法访问其他状态。使用 BaseSubscriber
,我们专门捕获 Subscription
并且钩子方法可以 cancel()
或 request(n)
该订阅。