有没有一种机制可以在创建20秒后杀死一名演员?如何在X时间后杀死Akka actor?
在http://doc.akka.io/docs/akka/snapshot/java/fault-tolerance.html
阅读有关各主管战略似乎杀死一个演员都是基于消息传递的异常?
有没有一种机制可以在创建20秒后杀死一名演员?如何在X时间后杀死Akka actor?
在http://doc.akka.io/docs/akka/snapshot/java/fault-tolerance.html
阅读有关各主管战略似乎杀死一个演员都是基于消息传递的异常?
您可以使用Scheduler在20秒后向演员发送PoisonPill消息,这将在演员处理该消息时自动终止演员;演员中不需要额外的代码。如果你想立即杀死演员,而不是等待毒丸在消息队列中工作,那么请使用stop。
system.scheduler().scheduleOnce(Duration.create(20, TimeUnit.SECONDS),
new Runnable() {
@Override
public void run() {
testActor.tell(PoisonPill.getInstance(), ActorRef.noSender());
}
}, system.dispatcher());
谢谢,我该如何检查testActor何时将PoisonPill发送给它? onReceive中是否有类型允许我检查是否发送了PoisonPill消息? – 2014-10-07 16:17:14
@ blue-sky这位演员将会死去,演员提出这个问题的点点点滴滴。有关闭钩子可以用来触发额外的行为,或者你可以让演员安排自己的死亡。我回答了你最初提出的问题,但是你最后的评论让我想知道你实际上想要做什么? – 2014-10-07 16:20:51
我只想要一个监视什么角色被杀的方法。我接受你的观点,这个问题得到解答,但我不知道如何验证一个演员是否被杀死。 – 2014-10-07 16:24:27
akka库似乎有一个功能来解决这个问题。没有使用它在我自己的,但声音的promissing:后[T]
如果未来成功完成,演员可以发送itselfe毒药。
self ! PoisonPill
克里斯K公司的答案相似,但采取了略微不同的方法,你可以把演员安排PoisonPill消息在20秒后开始前钩的执行过程中,例如发送给自己
@Override
public void preStart() {
getContext().system().scheduler().scheduleOnce(
Duration.create(20, TimeUnit.SECONDS),
getSelf(),
PoisonPill.getInstance(),
getContext().dispatcher(),
ActorRef.noSender());
}
这会保持UntypedActor定义内的行为,如果需要的话。
您可以使用计划程序在20秒后向演员发送PoisonPill消息,这会杀死演员。 – 2014-10-07 14:51:44
@ChrisK我对阿卡一无所知。演员是否必须自己处理药片还是内置药片? – 2014-10-07 14:52:18
@SotiriosDelimanolis演员框架将为您处理;我在下面的答案中包含了参考文献。 – 2014-10-07 15:01:58