当我必须阻止我的演员?

时间:2013-06-22 11:31:20

标签: java playframework-2.0 akka playframework-2.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);

请帮忙。

我的问题是:当我必须阻止我的演员?

另外一个问题:

如何在另一个控制器中访问此actor(获取此参考)?

2 个答案:

答案 0 :(得分:3)

我建议你创建一个你发送上传消息的长期上传器,它可以在内部创建新的actor来处理实际的上传,并在需要时关闭它们。这使客户免于管理生命周期。

答案 1 :(得分:2)

如果这个演员是短暂的并且只处理一个请求,那么你可以让演员在receive方法完成之后停止它自己:

getContext().stop(getSelf());

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

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

如果您要一次产生多个上传者,请务必将它们命名为唯一。启动时给出的名称是您可以用来从其他代码中查找的名称。