可以在Heroku中使用ScheduledExecutorService

时间:2011-11-16 03:59:28

标签: java heroku

如果没有进行Web调用,是否可以将ScheduledExecutorService与webdyno或heroku一起关闭java进程。

这是我想要使用的一个例子

ScheduledExecutorService scheduler =
  Executors.newSingleThreadScheduledExecutor();

final ScheduledFuture<?> timeHandle =
  scheduler.scheduleAtFixedRate(new TimePrinter(System.out), 0, 10, SECONDS);    

scheduler.schedule(new Runnable() {
  public void run() {

  }
}, 60*60, SECONDS);

2 个答案:

答案 0 :(得分:0)

你当然可以在Heroku上使用ScheduledExecutorService。在Heroku上运行时没有Java API限制。但是,如果您尝试关闭该进程,Heroku将尝试重新启动它。要在Heroku上处理扩展,您需要调用Heroku管理API。

答案 1 :(得分:0)

正确的是,如果您只运行一个dyno Web应用程序,那么如果他们没有收到任何流量,Web进程将会停止。

在Web进程中运行的调度程序线程应该只执行与进程本身相关的工作,例如清除内部缓存等。如果您坚持使用此用例,则在整个Web上不需要调度程序进程过程已被闲置。

如果您的计划程序在Web流程之外工作,那么我们建议您将其计入专用worker or "clock" process并将其缩放到一个dyno(实际上是单个流程)。 Heroku将确保进程正在运行,如果崩溃则重新启动它等等。

工作/时钟进程应该使用睡眠调用执行无限循环,因此它每X秒唤醒并执行一次工作。你将按小时计算一个完整的dyno小时,你正在运行这样的工人流程,这当然不总是经济的。

如果您只想每10分钟或更短时间安排一些事情,您可以使用Heroku scheduler service,这只会产生实际运行时间的成本,而不是睡眠时间。