【问题标题】:Webflux drops when overflow strategy is buffer溢出策略为缓冲区时 Webflux 下降
【发布时间】:2021-01-15 01:49:07
【问题描述】:

当我调用subscribe() 时,会在反应链之外调用。不遵循spring webflux的溢出策略吗?

fooRepository.findOne()
    .doOnNext { barRepository.save(bar).subscribe() }
    .flatMap { ... }

我有这种奇怪的行为,barRepository.save 有时有效,有时没有错误。我认为它正在被删除。

当服务器繁忙时,doOnNext 内部的 subscribe() 调用是否可以被丢弃?

This post 表示默认溢出策略是 BUFFER。

doOnNext 内部的 subscribe() 调用是否有不同的策略?

【问题讨论】:

  • 您不应该订阅,订阅者是调用客户端或最终消费者。您的应用程序是生产者。

标签: spring-webflux project-reactor reactor backpressure


【解决方案1】:

我可以假设您的订阅在持久性完成之前结束。

doOnNext() 旨在执行一些副作用行为,您不应在其中实现业务逻辑。因此,我相信您的存储库调用引发的异常或那里发生的任何事情都不会转化为您的主反应链,因此您只是失去对内部内容的控制。

如果您需要确保业务逻辑操作完成且不会丢失,您最好通过flatMap() 运算符将其包含在主流程中。

无论如何,您也可以将.doOnError() 添加到barRepository.save(bar).subscribe() 并记录问题。

【讨论】:

    猜你喜欢
    • 2015-12-16
    • 1970-01-01
    • 2010-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多