如何在阿卡找到具体的演员

时间:2013-07-03 19:12:58

标签: java akka actor

在java中

我有简单的网络应用程序。在ServletContextListener我创建了演员

ActorSystem system = ActorSystem.create("MySystem");
actor = system.actorOf(new Props(MyServerActor.class), "MyServer");
actor.tell(new StartMessage());

此演员有路径akka://MySystem/user/MyServer。然后我尝试从业务方法

向此演员发送消息
ActorSystem system = ActorSystem.create("MySystem");
client = system.actorSelection("/user/MyServer"); // same effect when use actorFor
client.tell("OK");

onReceive方法:

@Override
public void onReceive(Object message) throws Exception {
    System.out.println(message + " :  " + message);
}

但我的演员没有收到消息。它看起来像我发送到/ dev / null。

哪里出错?

//编辑:

我也尝试使用完整路径。

2 个答案:

答案 0 :(得分:3)

好的,我太蠢了......

我创建了两个System因此无法访问另一个,找不到actor所以消息被发送到/dev/null

答案 1 :(得分:3)

你可以试试远程演员:

String path = "akka://MySystem@some-ip:some-port/some/sub/path"
ActorRef xxx = actorSystem.actorFor(path);

此外,如果您订阅deadLetters()actor以记录未处理的消息,那会更好。

final ActorRef actor = actorSystem.actorOf(new Props(DefaultDeadLetterHandlerActor.class));
actorSystem.eventStream().subscribe(actor, DeadLetter.class);

或者只是简单地记录它们。