阿卡 - 创造远程演员

时间:2017-06-29 14:09:05

标签: heroku akka actor akka-remote-actor

我正在尝试在远程主机上创建Akka Actors。 在官方文档之后,我创建了一个解析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 {actor {       provider = remote} remote {       enabled-transports = [" akka.remote.netty.tcp"]       netty.tcp {         hostname =" shielded-atoll-29637.herokuapp.com"         port = 2552       }}

进一步详情:

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

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

提前致谢, 贾科莫

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

虽然您可以在远程ActorSystem上启动演员,但您必须已使用您希望能够触发的所有代码部署ActorSystem。这通常由不同节点使用,这些节点都是同一群集的一部分。你的情况似乎有点不同。

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

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

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

答案 2 :(得分:0)

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