1

我正在尝试在远程主机上创建 Akka Actor。按照官方文档,我创建了一个解析 application.config 文件的远程 Actor 系统,然后我创建了一个新的 Actor。这是我的代码:

public static void main(String[] args) {

    Config config = ConfigFactory.parseFile(new File("application.conf"));
    ActorSystem system = ActorSystem.create("system",config);
    ActorRef actor = system.actorOf(Props.create(SampleActor.class), "sampleActor");
    System.out.println(actor.path());
    actor.tell("Hello", ActorRef.noSender());
}

这就是我设置 application.conf 文件的方式:

akka {演员{提供者=远程}远程{启用传输= [“akka.remote.netty.tcp”] netty.tcp {主机名=“shielded-atoll-29637.herokuapp.com”端口=2552}}}

更多详细信息:

  • Akka 协议默认由 Akka 提供
  • shielded-atoll-29637.herokuapp.com 是我托管在 heroku 上的服务器的默认域。

关键是:我应该使用另一台服务器还是 heroku 就足够了?如果 Heroku 没问题,我是否应该编写一个服务器应用程序,在端口 2552 上侦听传入的参与者创建请求?因为文档根本没有提到任何东西。

提前感谢,贾科莫

4

3 回答 3

0

考虑到我需要一个 IP 或域名并且防火墙上的端口应该是开放的,我认为 Akka 不是在移动设备上创建分布式系统的最佳解决方案。例如,对于一家在其网络中拥有具有静态 IP 和可配置防火墙的服务器的公司来说,这很好。

于 2017-07-01T08:35:32.240 回答
0

虽然您可以在 remote 上启动 actor ActorSystem,但您必须已经ActorSystem使用您希望能够触发的所有代码部署了它。这通常由属于同一集群的不同节点使用。你的情况似乎有点不同。

我不认为以这种方式在 Heroku 上部署 Akka 会起作用:如果我没记错 Heroku 高度以 HTTP 为中心,所以我怀疑它是否能正确确保在与端口 2552 建立连接时启动基于 Akka 的应用程序.

在 Heroku 上部署服务器代码并通过 HTTP 触发可能更有意义。这样你就可以更好地使用 Heroku 的设计工作方式,并且实现仍然可以是基于 Akka(使用 akka-http)或完全不同的东西。

请考虑 Heroku 会希望您将长时间运行的进程卸载到工作节点,因此这实际上取决于您尝试做什么,这是否是一个好的解决方案。

于 2017-07-04T12:34:15.990 回答
0

您可以使用 Heroku Private Spaces 来配置和部署 Dyno,其中包含您想要远程使用的演员。由于您不知道另一个 Dyno 的 IP 地址,您应该使用Private Spaces DNS Service Discovery来处理主机名。服务器-Dyno 应该使用该主机名进行绑定,而客户端 Dyno 应该使用该主机名进行连接。

于 2017-09-25T11:31:30.740 回答