我已经使用Akka actor实现了一个基本的Web套接字示例,这是我在Play框架应用程序控制器中使用的代码:
public static WebSocket<String> socket() {
return WebSocket.whenReady((in, out) -> {
// create a new UserActor and give it the default stocks to watch
final ActorRef messageActor = Akka.system().actorOf(Props.create(MyWebSocketActor.class, out),"SocketActor");
// List<String> defaultStocks = Play.application().configuration().getStringList("default.stocks");
// send all WebSocket message to the UserActor
in.onMessage(message -> {
// parse the JSON into Stock.Watch
messageActor.tell(message, ActorRef.noSender());
});
// on close, tell the userActor to shutdown
in.onClose(() -> {
// kill actor
Akka.system().stop(messageActor);
});
});
}
现在在另一个控制器中,假设一个Messages控制器,我想将消息传递给actor,以便在套接字中推送消息。所以在另一个控制器中我设置了一个ActorSelection:
ActorSelection myActorSel = Akka.system().actorSelection("SocketActor");
Object message = "test";
myActorSel.tell(message, ActorRef.noSender());
但我在Akka记录器中收到错误消息:
Message from [] to [] was not delivered [1]. Dead letter encountered.
正如我在互联网上发现的那样,这意味着其他控制器无法访问该actor,或者该actor不再处于活动状态。 有人指出我设置一个主管作为一个可能的解决方案但是,我在java中找到了任何一个例子。有人可以帮助我或指出一些资源吗?