在Heroku上,您可以在应用程序中以编程方式获取当前正在执行代码的dyno的某种标识符吗?例如,dyno名称(例如“web.1”或“worker.1”)或其他一些id。
如果是,如何在Java中执行此操作?
答案 0 :(得分:9)
总是有机器的主机名(看起来像d.LONG_GUID
。我想(虽然没试过)这应该有用:
String localhostname = java.net.InetAddress.getLocalHost().getHostName();
另外,一个鲜为人知的秘密,但你可以通过查看环境变量PS1
String hostId = System.getenv("PS1")
编辑 2013年7月26日
根据Heroku changelog,本地环境变量DYNO
现在取代PS
,后者取代PS1
。
答案 1 :(得分:1)
Heroku团队解决了这个问题,现在Dyno Manager添加了DYNO
环境变量,其中包含您的Dyno的标识符,例如web.1
,web.2
,foo.1
等。但是,该变量仍然是实验性的,可能会更改或删除。
您可以使用Java中的System.getenv(String)
获取该变量的值。
示例:
final String dynoId = System.getenv("DYNO");
final Matcher matcher = Pattern.compile("(\\w+)\\.(\\d+)").matcher(dynoId);
String id = null;
if(matcher.find()) {
id = matcher.group(2); // returns index: 1
// matcher.group(1) - returns name: web
}
我希望这会有所帮助