【问题标题】:Akka Port ForwardingAkka 端口转发
【发布时间】:2017-03-30 06:23:18
【问题描述】:

我正在尝试对我的 Akka 程序执行端口转发,在该程序中,客户端可以通过 Internet 与服务器进行通信。我已经配置了我的路由器,并且端口转发机制正在工作,但 Akka 似乎有问题。

问题是客户端无法从服务器获取远程actor。在服务器端不断出现接收者不同的错误。客户端通过"akka.tcp://RemoteSystem@67.18.67.18:5150/user/remote" 获取远程参与者,例如67.18.67.18 是我的全球IP 地址。然后远程参与者在路径"akka.tcp://RemoteSystem@192.168.0.106:5150/user/remote" 上进行远程处理,其中192.168.0.106 是我的服务器本地IP。我知道客户端必须使用相同的路径访问远程参与者,但尽管我定义了public-localname,服务器仍然没有将全局 IP 转换为本地 IP 或允许通过全局 IP 访问。有什么解决方法吗?下面是服务器的application.conf

akka {
   loglevel = "INFO"

   actor {
     provider = "akka.remote.RemoteActorRefProvider"
   }

   remote {
     enabled-transports = ["akka.remote.netty.tcp"]
     netty.tcp {
       hostname = ""
       port = 5150
       public-hostname = "67.18.67.18"
     }

     log-sent-messages = on
     log-received-messages = on
   }

 }

【问题讨论】:

    标签: scala tcp akka remoting portforwarding


    【解决方案1】:

    配置参数是“bind-hostname”用于您要绑定的接口,“hostname”用于公共 IP。您还需要为要绑定的本地端口设置“bind-port”,为公共 IP 设置“端口”。

    更多详情请查阅文档:http://doc.akka.io/docs/akka/snapshot/scala/remoting.html

    【讨论】:

    • 我错过了那个文档。我记得我以前在某个地方看到过。我坚持认为公共主机名是正确的使用机制。谢谢顺便说一句。
    • 顺便问一下,你知道如何在conf中获取本地地址吗?我知道 hostname = "" 会自动使用 InetAddress.getLocalHost.getHostAddress。但是对于 bind-hostname 它不起作用。我试过 bind-hostname = "InetAddress.getLocalHost.getHostAddress",也不起作用。我真的不想在 conf 中明确定义地址。谢谢。
    • 在配置文件中提供一个带有可选系统属性覆盖的默认值,并在启动时将该值作为系统属性提供:github.com/typesafehub/…
    • 你给的方法需要提供环境变量。我实际上找到了一种更好的方法,您可以使用 ConfigFactory 覆盖代码中的属性。原始帖子在下面找到。尽管如此,我仍然非常感谢您的回答。 stackoverflow.com/questions/35627839/…
    猜你喜欢
    • 2012-01-12
    • 2013-12-08
    • 1970-01-01
    • 2015-02-24
    • 2012-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多