AKKA演员有自己的道路吗?如果是,我们怎么称呼他们



有人告诉我,当我创建一个参与者并为其命名时,可以通过url路径来识别该参与者,即如果我创建了一个参与者

ActorSystem system = ActorSystem.create("mySystem");
ActorRef reference = system.actorOf(Props.create(Actor.class),"actorName");

那么这是否意味着我可以通过向发送http请求来联系这个参与者

akka.tcp://mySystem@ip:port/user/actorName

如果是,我们如何通过HTTP调用Actor.Class的方法?

正如Matthias所建议的,Akka actor不公开HTTP端点。

但是,是的,每个参与者都有一条路径,并且可以通过该路径查找其自己的引用,参见通过具体路径查找参与者。这并不意味着可以在actor上调用一个方法——您可以通过查找路径,然后向actor发送消息来获取其ActorRef。发送信息是与演员沟通的唯一合法方式。请参阅下面的示例代码:

case class Message(payload: String)
def lookupByPath(path: String): Future[ActorRef] = ??? 
val actorRefFuture = lookupByPath(path)
actorRefFuture.onComplete {
case Success(actorRef) => 
// This is not allowed in Akka
// actorRef.sayHello()
// Sending messages is the only legit way
actorRef ! Message("hello")
case Failure(ex) => // error handling
}

不,不能通过HTTP调用Akka参与者的方法。

相关内容

最新更新