2017-06-29 150 views
1

我试图在远程主机上创建Akka Actor。 继官方文档之后,我创建了一个远程Actor系统解析application.config文件,然后创建一个新的actor。 这是我的代码:Akka - 创建远程演员

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.remote.netty.tcp“] netty.tcp { 主机名= ”shielded-atoll-29637.herokuapp.com“ 端口= 2552 }}}

进一步了解详细:

  • 阿卡协议默认情况下,提供由阿卡
  • shielded-atoll-29637.herokuapp.com是托管在Heroku我的服务器 的默认域。

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

由于提前, 贾科莫

回答

0

考虑到我需要一个IP地址或域名,并在防火墙上的端口应该是开放的,我认为阿卡不是要建立在移动设备上分发系统的最佳解决方案。例如,在一家拥有静态IP和可配置防火墙的网络内部的服务器中,这是一件好事。

0

虽然您可以在远程ActorSystem上启动演员,但您必须已经将ActorSystem与您想要触发的所有代码配合使用。这通常由属于同一集群的不同节点使用。你的情况似乎有点不同。

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

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

不要认为Heroku会让您将长时间运行的进程卸载到工作节点,所以它真的取决于您要做什么,无论这是否是一个好的解决方案。

+0

我改变了主意,转而采用另一种移动设备上消息传递的解决方案:PubNub库。 –

0

您可以使用Heroku私人空间来配置和部署一个Dyno到您想要远程使用的角色。由于您无法知道其他Dyno的IP地址,因此您应该使用Private Spaces DNS Service Discovery来处理主机名。服务器-Dyno应该使用该主机名进行绑定,并且客户端Dyno应该使用该主机名来建立连接。