1

在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。

错在哪里?

//编辑:

我也尝试使用完整路径。

4

2 回答 2

3

您可以尝试使用远程演员:

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

此外,如果您订阅了 deadLetters() 演员来记录未处理的消息会更好。

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

也许只是简单地记录它们。

于 2013-08-05T08:58:07.963 回答
3

好吧,我太傻了……

我创建了两个System,因此无法访问另一个,找不到演员,因此将消息发送到/dev/null

于 2013-07-03T19:37:49.663 回答