我拥有Play 2.2.2应用程序。
实际部署在Heroku上,我有这样的配置:
$heroku ps
=== web (1X): `target/universal/stage/bin/myWebApp -Dconfig.resource=prod.conf -Dhttp.port=${PORT}`
web.1: up 2014/03/05 03:53:05 (~ 9h ago)
web.2: up 2014/03/05 04:10:03 (~ 9h ago)
所以我拥有2个网络dynos,每个都运行我的Play应用程序的实例。
现在我想在Global.scala
上只在一个dyno上启动一个特定的Akka调度程序。
只有一个,因为它将专注于轮询数据库中的EventStore
,其升序非常重要。
似乎可以使用命令选项Global.scala
使用特定-Dapplication.global=Global2.scala
指定特定实例。
这很好,因为我可以创建Global2.scala
运行调度程序,同时让Global.scala
不受所有其他dynos的影响。
ProcFile应如何指定添加调度程序的dyno?
目前我有这个:
web: target/universal/stage/bin/myWebApp -Dconfig.resource=prod.conf -Dhttp.port=${PORT}
我遇到了这个post,但答案中给出的程序对我来说不是很清楚..
应该是:
web: target/universal/stage/bin/myWebApp -Dconfig.resource=prod.conf -Dhttp.port=${PORT}
singleton: `target/universal/stage/bin/myWebApp -Dconfig.resource=prod.conf -Dhttp.port=${PORT} -Dapplication.global=Global2.scala`
并制作:
heroku ps:scale singleton=1
缺点是我会丢失一个用于处理用户HTTP请求的dyno 确实,documentation州:
Web流程类型很特殊,因为它是唯一的流程类型 将从Heroku的路由器接收HTTP流量。其他流程类型 可任意命名。
有人能给我一个提示吗?
答案 0 :(得分:1)
您可以在运行时获取dyno名称:
String dyno = System.getenv("DYNO");
因此,在您的代码中,您可以通过检查dyno变量来运行Akka调度程序:
if(dyno.equals("web.1")) {
Akka.system().scheduler().scheduleOnce(
Duration.Zero(),
new Runnable() {
public void run() {
// do something
}
},
Akka.system().dispatcher()
);
}