如何从其他java控制器向播放中的Akka演员发送消息?

时间:2014-08-08 22:07:40

标签: java playframework akka

我已经使用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中找到了任何一个例子。有人可以帮助我或指出一些资源吗?

0 个答案:

没有答案