java - 在不知道远程主机地址的情况下远程控制参与者

标签 java akka

我想构建一个具有静态 IP 地址和端口的公共(public)服务器的 Actor 系统。会有很多客户端知道服务器的地址。服务器不知道客户端的 IP 地址。

服务器的配置:

akka {
  actor {
    provider = "akka.remote.RemoteActorRefProvider"
  }
  remote {
    transport = "akka.remote.netty.NettyRemoteTransport"
    netty {
      hostname = "46.38.232.161"
      port = 2552
    }
  }
}

客户端配置:

akka {
  actor {
    provider = "akka.remote.RemoteActorRefProvider"
  }
  remote {
    transport = "akka.remote.netty.NettyRemoteTransport"
    netty {
      port = 2553
    }
  }
}

客户端可能来自整个互联网。现在我想将消息从客户端上的参与者发送到服务器上的参与者。服务器如何知道将消息发送回哪里?当我将ActorPath发送到服务器时,他会知道相应的客户端地址,这些不包含客户端的IP地址。

最佳答案

如果您想要通信,可以在您的 application.conf 中将

akka.remote.netty.hostname 属性设置为可访问的 IP 地址或可解析的名称通过网络。实际上,使用 Akka 时,您的“客户端”节点也将是服务器。

如果应用程序启动时地址未知,请考虑 Akka 文档中的以下代码片段:

import akka.actor.ActorSystem
import com.typesafe.config.ConfigFactory

val customConf = ConfigFactory.parseString("""
  akka.actor.deployment {
    /my-service {
      router = round-robin
      nr-of-instances = 3
    }
  }
""")

// ConfigFactory.load sandwiches customConfig between default reference
// config and default overrides, and then resolves it.
val system = ActorSystem("MySystem", ConfigFactory.load(customConf))

关于java - 在不知道远程主机地址的情况下远程控制参与者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13509198/

相关文章:

java - Java中如何从包内引用类

ssl - 简单的 Akka ssl 加密

scala - 使用 sbt 和 Akka 微内核运行应用程序

java - 如何从串行端口读取文本?

java - 如何使用代码停止 Apache Felix Webconsole 中的 bundle

java - org.dom4j.DocumentException : Stream closed Nested exception: Stream closed

scala - 如何解构 Spray API HTTPResponse?

java - 哪个更快,String 或 Integer 作为 Java 中的 hashkey?

scala - 我如何计算 akka 当前打开的连接

multithreading - Option [Object]上的Scala匹配未完全包含Some(o),Akka中没有None接收函数