有人告诉我,当我创建一个参与者并为其命名时,可以通过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参与者的方法。