我下面从akka.io容错http://doc.akka.io/docs/akka/current/java/fault-tolerance.html
.I代码reference.My要求如下采取这种代码重试相同的消息与定义的间隔时间定义的数字: 让我们假设演员在消息 上崩溃,并由其主管重新启动。然后他开始在他的邮箱中处理下一个 消息。这导致崩溃的消息是 “dropped'.But我要处理的时间的特定数目相同的动作(假定3次),在它们之间限定的间隔(假定1秒)。如何做到这一点使用阿卡监督。实际上是通过演员我想检查特定服务的API是否运行(即给予一定的例外)。所以,如果有一个特定的尝试任何异常,(假设404未找到),然后重新发送邮件到失败的工人 直到达到supervisorStrategy指定的maxNrOfRetries。如果工作人员失败了“maxNrOfRetries”次,那么只需记录“为此xx消息达到的最大尝试次数”。如何在java中执行此操作。使用演员监督,如何在发生故障时
我的上司类:
public class Supervisor extends UntypedActor {
private static SupervisorStrategy strategy =
new OneForOneStrategy(3, Duration.create("1 minute"),
new Function<Throwable, Directive>() {
@Override
public Directive apply(Throwable t) {
if (t instanceof Exception) {
return restart();
}else if (t instanceof IllegalArgumentException) {
return stop();
} else {
return escalate();
}
}
});
@Override
public SupervisorStrategy supervisorStrategy() {
return strategy;
}
public void onReceive(Object o) {
if (o instanceof Props) {
getSender().tell(getContext().actorOf((Props) o), getSelf());
} else {
unhandled(o);
}
}
}
子类:
public class Child extends UntypedActor {
public void onReceive(Object o) throws Exception {
if (o instanceof String) {
Object response = someFunction((String) message);//this function returns either successfull messgae as string or exception
if(response instanceOf Exception) {
throw (Exception) response;
}
else
getSender().tell(response, getSelf())
}else {
unhandled(o);
}
}
}
创建演员:
Props superprops = Props.create(Supervisor.class);
ActorRef supervisor = system.actorOf(superprops, "supervisor");
ActorRef child = (ActorRef) Await.result(ask(supervisor,
Props.create(Child.class), 5000), timeout);
child.tell("serVice_url", ActorRef.noSender());
因为我要重复的过程中如果失败occurs.But它的SERVICE_URL没有发生。如果写在creatng演员作为child.tell("serVice_url_2", ActorRef.noSender());
然后这条线exucted下一行,但我要处理的相同的操作(其中发生故障)的时间的特定数目(假定3次),在它们之间限定的间隔。 请指导我做到这一点。
我问[类似的问题(https://stackoverflow.com/questions/42319399/akka-supervisor-delayed-restart-without-losing-message)几乎在同一时间比你;我也在审查你的。使用此解决方案,您确实可以将消息放回,但无法定义重新启动之间的时间(回退)。 –
是的,我没有能够定义他们之间的时间间隔。任何建议如何做到这一点?@ɐuıɥɔɐɯ –