1

我在 Play 2 的控制器中启动我的演员。我在某处读到我必须停止我的演员。当我按照下面的示例停止它时,我遇到了文件根本不上传的问题。当我发表评论时,它开始上传。

    //Akka 
    ActorSystem system = Akka.system();
    ActorRef uploader = system.actorOf(new Props(UploaderActor.class), "uploader");
    uploader.tell(new Uploader(post.id, "/public/images/post/",post, request()), uploader);
    //system.stop(uploader);

请帮忙。

我的问题是:我什么时候必须停止我的演员?

还有一个问题:

我怎样才能在另一个控制器中访问这个演员(得到这个参考)?

4

2 回答 2

3

我建议创建一个长期存在的上传器,您可以将上传消息发送到该上传器,它可以在内部创建新的参与者来处理实际的上传并在需要时将其关闭。这将客户(您)从管理生命周期中解放出来。

于 2013-06-22T17:02:46.973 回答
2

如果这个actor是短暂的并且只处理一个请求,那么你可以让actor在receive方法中停止它自己,如下所示:

getContext().stop(getSelf());

这样你就可以确定演员在被停止之前已经完成了。对于你的第二个问题,如果你想从其他地方查找这个演员实例,你所需要的只是对它正在运行的演员系统的引用。如果你有,那么它只是:

ActorRef ref = system.actorFor("/user/uploader")

如果您要一次生成多个上传者,请确保为它们命名。您在启动它时给它的名称是您可以用来从其他一些代码中查找它的名称。

于 2013-06-22T15:01:55.843 回答