我正在尝试在远程主机上创建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 }}
进一步详情:
重点是:我应该服用另一台服务器还是heroku就足够了?如果Heroku没问题,我是否应该编写一个服务器应用程序,在端口2552上侦听传入的actor创建请求?因为文档根本没有提到任何内容。
提前致谢, 贾科莫
答案 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应该使用该主机名进行连接。