【问题标题】:Can or should Schedulers.newElastic be reused?可以或应该重用 Schedulers.newElastic 吗?
【发布时间】:2019-10-11 08:35:02
【问题描述】:

寻找有关反应器调度程序的指导。

我想在后台运行某些 IO 任务,即向技术团队发送电子邮件。为了使其异步,我使用 Mono.fromRunnable 订阅了调度程序。

我可以选择使用 Schedulers.elastic() 或 Schedulers.newElastic()。我更喜欢后者,因为它允许我给它一个唯一的名称,这将有助于日志分析。

是否可以制作静态变量,例如

Scheduler emailSched = Schedulers.newElastic("email");

然后在我的 Mono 上订阅它,而不是每次都创建一个新的调度程序实例?

我只找到了What is the difference between Schedulers.newElastic and Schedulers.elastic methods?,这对我的问题没有多大帮助。

【问题讨论】:

    标签: project-reactor


    【解决方案1】:

    我应该每次都创建一个新的调度程序实例吗?

    如果您不想这样做,没有技术原因需要这样做。在大多数情况下,这可能无关紧要。

    主要区别在于:

    • 如果你愿意,你可以给它一个不同的名字(简单)
    • 任何单独的弹性调度程序都会缓存和重用它在后台创建的执行程序,默认超时为 60 秒。但是,该缓存不会在同名的不同调度程序实例之间共享。
    • 您可以处置任何单独的弹性调度程序,而不会影响其他同名调度程序。

    在你描述的情况下,这些都不是真正起作用的因素。

    与上述分开,请注意Schedulers.boundedElastic() 现在是首选选项,尤其是对于包装阻塞 IO(这似乎是您在那里所做的)。

    【讨论】:

    • 嗨@Michael Berry,创建一个调度程序实例并在多个通量订阅者中使用它是一种好习惯吗?
    • 类似的,我们可以有Schedulers.newBoundedElastic(),加上自定义参数,做成spring bean,就可以达到和Scheduler.boundedElastic()一样的效果吧?
    • @DeekshithAnand 如上所述,如果确实有令人信服的理由,我只会创建一个新的调度程序 - 但是是的,如果你这样做,那么共享该实例将是最有意义的(无论是通过Spring bean 或其他一些机制。)
    猜你喜欢
    • 2016-01-29
    • 2020-08-27
    • 1970-01-01
    • 2021-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多