10

在 Heroku 上,您能否以编程方式从应用程序中获取当前执行代码的测功机的某种标识符?例如测功机名称(例如“web.1”或“worker.1”),或其他一些id。

如果是,如何在 Java 中做到这一点?

4

2 回答 2

9

总是有机器的主机名(看起来像d.LONG_GUID. 我想(虽然没有尝试过)这应该可以工作:

String localhostname = java.net.InetAddress.getLocalHost().getHostName();

另外,一个鲜为人知的秘密,但是您可以通过查看环境变量的值来获取“web.1”、“web.2” idPS1

String hostId = System.getenv("PS1")

编辑2013 年 7 月 26 日

根据Heroku 更改日志,本地环境变量DYNO现在替换PS,它替换PS1

于 2013-05-05T03:24:08.940 回答
1

Heroku 团队已经解决了这个问题,现在 Dyno 管理器添加DYNO了包含 Dyno 标识符的环境变量,例如web.1,web.2foo.1。但是,该变量仍然是实验性的,可能会更改或删除

System.getenv(String)您可以使用Java获取该变量的值。

例子:

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
}

我希望这会有所帮助

于 2014-12-31T14:20:43.740 回答