有人告诉我创建演员并给它命名时,可以通过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的方法?
答案 0 :(得分:2)
正如Matthias所建议的那样,Akka演员没有公开HTTP端点。
但是,是的,每个参与者都有一条路径,可以通过该路径查找自己的引用,请参见looking up actors by concrete path。这并不意味着可以在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
}
答案 1 :(得分:0)
不,您不能通过HTTP调用Akka actor的方法。