Scala 如何观看远程Akka演员?
我正在学习akka remote,在我的Scala 如何观看远程Akka演员?,scala,akka,typesafe-stack,akka-remote-actor,Scala,Akka,Typesafe Stack,Akka Remote Actor,我正在学习akka remote,在我的LocalActorSystem中,我做的一件事就是获取远程actor参考并向他发送消息 class LocalActor extends Actor { val remote = context.actorSelection("akka.tcp://HelloRemoteSystem@127.0.0.1:5150/user/RemoteActor") var counter = 0 def receive = { case "STA
LocalActorSystem
中,我做的一件事就是获取远程actor参考并向他发送消息
class LocalActor extends Actor {
val remote = context.actorSelection("akka.tcp://HelloRemoteSystem@127.0.0.1:5150/user/RemoteActor")
var counter = 0
def receive = {
case "START" =>
remote ! "Hello from the LocalActor"
case msg: String =>
println(s"LocalActor received message: '$msg'")
if (counter < 5) {
sender ! "Hello back to you"
counter += 1
}
}
}
我还想看remoteActor
,这样如果它死了,LocalActor系统就会知道。所以我做了
val remote = context.actorSelection("akka.tcp://HelloRemoteSystem@127.0.0.1:5150/user/RemoteActor")
context watch remote
但编译器失败,并显示以下消息
问题
Actor
,为什么我能够将消息发送到Actor选择
但是,不推荐使用的API没有抱怨
val remote = context.actorFor("akka.tcp://HelloRemoteSystem@127.0.0.1:5150/user/RemoteActor")
context watch remote
当您通过
actorSelection
进行查找时,返回的对象类型是actorSelection
,而不是ActorRef
。现在,ActorSelection
既支持tell(!)
又支持ask(?)
,因此您可以像ActorRef
一样与之交互。但是通过actorSelection
查找参与者支持通配符的概念,因此您返回的actorSelection
可能代表多个参与者,并允许您向多个参与者发送消息。例如,如果您这样做了:
system.actorSelection(“/user/foo/*”)
这将为绑定到名称foo
的父ActorRef
下的所有子项提供ActorSelection
。如果有两个孩子,您通过该ActorSelection
发送消息,则该消息将传递给两个孩子
在您的例子中,看起来您正在查找单个参与者实例。在这种情况下,您可以通过调用resolveOne
从ActorSelection
获取ActorRef
。这将返回一个Future[ActorRef]
,完成后将为您提供一个ActorRef
,您可以远程观看。您还可以发送ActorSelection
一条Identify
消息,并等待包含要查看的引用的ActorIdentity
响应
您应该查看文档,特别是通过参与者选择识别参与者部分
val remote = context.actorFor("akka.tcp://HelloRemoteSystem@127.0.0.1:5150/user/RemoteActor")
context watch remote