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

时间:2020-07-18 14:06:11

标签: java akka actor

有人告诉我创建演员并给它命名时,可以通过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的方法?

2 个答案:

答案 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的方法。