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

问题描述 投票:0回答:1

projectreactor.iodocscorereleasereference(项目反应器)。 文件显示了对 BaseSubscriber 作为在订阅中使用lambdas的替代方案,然而通过阅读参考文档。BaseSubscriber 我看不出覆盖任何一个钩子能达到什么效果,而覆盖了 Subscriber 基方法则不会。为什么我们要使用 BaseSubscriber 根本没有?

spring-webflux project-reactor reactive-streams
1个回答
1
投票

BaseSubscriber 中实现了记账和看守。Subscriber 方法,这样你就不必再写那个锅炉模板,也不必担心锅炉模板是正确的,涵盖了所有的基础(例如,在 onNextonSubscribe等,并将上述例外情况转化为:。onError 信号)。)

请注意,当你使用基于lambda的版本的 Flux#subscribe它创造了一个非常相似的 LambdaSubscriber 用同样的模板。

那么在这两种情况下,作为开发者的你就只剩下实现业务逻辑了。在一种情况下,是通过提供的lambdas来实现,而在另一种情况下,是通过 BaseSubscriber 通过实施 hookXxx 方法。

lambda方法与的主要区别是。BaseSubscriber 一个是在lambdas中,你不能访问lambda的输入参数以外的状态。有了 BaseSubscriber,我们特别抓住了 Subscription 和钩子方法可以 cancel()request(n) 该订阅。


0
投票

在您需要更多控制流的情况下,它将非常有用。例如 BaseSubscriber 是一个 Disposable 它让你 处置Subscription 并产生 onCancel 事件。它还实现了 Subscription 可以让你限制 请求 如果subscriber请求放慢速度或使其在运行中不受约束。

如果你觉得这些概念难以理解,那么我建议你看看Java中的继承和多态。

EDIT:

onSubscribe() 会捕获冒泡的异常,如果捕获到异常,会生成错误事件。的用例。hookOnSubscribe 是当你不想覆盖默认的异常机制,但仍然需要在订阅事件生成后写一些代码,那么你可以使用 hookOnSubscribe. 当覆盖 hookOnSubscribe,记得打电话 subscription.request(somebound)

© www.soinside.com 2019 - 2024. All rights reserved.