我发现Akka 登陆页面上提供的 Akka 远程处理的介绍性示例作为介绍有点难以理解,并且学习远程处理的来龙去脉所需的文档长度因介绍性目的而结构不正确。
下面是来自上述示例的代码,我想要求在一些公平的上下文中描述该代码的含义,同时涉及是否可以远程向任何参与者发送消息的问题,就好像它是本地的一样只需要仅仅改变配置。先前关于这最后一点的答案似乎与当前的 Akka 文档有些矛盾,而文档本身对这一点有些不确定。
// ------------------------------
// config on all machines
akka {
actor {
provider = akka.remote.RemoteActorRefProvider
deployment {
/greeter {
remote = akka.tcp://MySystem@machine1:2552
}
}
}
}
// ------------------------------
// define the greeting actor and the greeting message
case class Greeting(who: String) extends Serializable
class GreetingActor extends Actor with ActorLogging {
def receive = {
case Greeting(who) ⇒ log.info("Hello " + who)
}
}
// ------------------------------
// on machine 1: empty system, target for deployment from machine 2
val system = ActorSystem("MySystem")
// ------------------------------
// on machine 2: Remote Deployment - deploying on machine1
val system = ActorSystem("MySystem")
val greeter = system.actorOf(Props[GreetingActor], name = "greeter")
// ------------------------------
// on machine 3: Remote Lookup (logical home of “greeter” is machine2, remote deployment is transparent)
val system = ActorSystem("MySystem")
val greeter = system.actorSelection("akka.tcp://MySystem@machine2:2552/user/greeter")
greeter ! Greeting("Sonny Rollins")
因此,对这个示例代码的介绍性解释也会非常有帮助。一个解释应该希望能够选择一个可以在单个 JVM 内以及跨 JVM 和服务器边界轻松扩展的参与者架构,而不是进入几天甚至更多的实验模式。
谢谢!