我在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(获取此参考)?
答案 0 :(得分:3)
我建议你创建一个你发送上传消息的长期上传器,它可以在内部创建新的actor来处理实际的上传,并在需要时关闭它们。这使客户免于管理生命周期。
答案 1 :(得分:2)
如果这个演员是短暂的并且只处理一个请求,那么你可以让演员在receive
方法完成之后停止它自己:
getContext().stop(getSelf());
这样你可以确定演员在被停止之前完成了。对于你的第二个问题,如果你想从其他地方查找这个actor实例,你所需要的只是对它所运行的actor系统的引用。如果你有,那就是:
ActorRef ref = system.actorFor("/user/uploader")
如果您要一次产生多个上传者,请务必将它们命名为唯一。启动时给出的名称是您可以用来从其他代码中查找的名称。