Schedulers.newElastic是否可以重复使用?

时间:2019-10-11 08:35:02

标签: project-reactor

正在寻找反应堆调度程序的指南。

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

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

可以创建一个静态变量吗?

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

并在Mono上订阅它,而不是每次都创建一个新的Scheduler实例?

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

1 个答案:

答案 0 :(得分:1)

  

我应该每次创建一个新的Scheduler实例吗?

如果您不想这样做,则没有技术原因。在大多数情况下,这可能并不重要。

主要区别在于:

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

在您描述的情况下,这些因素都没有真正发挥作用。

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