Hi George, I think you will find the answer here: http://doc.akka.io/docs/akka/2.3.9/java/routing.html#Supervision
Regards, Patrik On Mon, Feb 23, 2015 at 1:56 PM, George Lu <luwenbin...@gmail.com> wrote: > Dear all, > > For learning Akka, I wrote below in Java to test fault-tolerance. > I have a master actor to assign job to worker actors, in the master actor, > simply divide the job into several pieces and use round robin router to > assign to workers (i.e. let workers add slices of a summation). > > In the worker onReceive, I let the first worker who does its job to throw > an Exception, please consider below code: > > WorkerActor/onReceive: > > if(RetryCount >=1 ) { > RetryCount--; > throw new Exception("exception thrown from worker"); > } > > WorkerActor/preRestart: > public void preRestart(Throwable cause, Option<Object> msg) { > System.out.println("Thread "+Thread.currentThread().getId()+" get restart > message "); > if(cause instanceof Exception && msg.nonEmpty()) { > WorkerMessage workerMsg = (WorkerMessage)msg.get(); > getSelf().forward(workerMsg, getContext()); > //getSelf().tell(workerMsg, getSender()); > } > else { > return; > } > } > > For the master actor: > router = getContext().actorOf( > Props.create(WorkerActor.class).withRouter( > new RoundRobinRouter(10))); > > private static SupervisorStrategy strategy = new OneForOneStrategy(10, > Duration.create(1, TimeUnit.MINUTES), > new Function<Throwable, Directive>() { > > public Directive apply(Throwable exception) throws Exception { > if (exception instanceof Exception) { > return SupervisorStrategy.restart(); > } else { > return SupervisorStrategy.escalate(); > } > } > > }); > > @Override > public SupervisorStrategy supervisorStrategy() { > return strategy; > } > > I have 10 workers running and tasks assigned in round-robin algorithm, > after running the example, the restart run as expected, but I have several > questions: > 1) All 10 workers' preRestart get called, why is that, is that correct as > I used OneForOneStrategy and I thrown exception only from one worker? > I use the msg.nonEmpty() to get rid of those null msg passed in as > from my running result, all 10 workers run the preRestart which I am quite > confused. > > 2) After one worker forwards the message, another worker receives the > message and re-process it, they are not the same thread, is that correct? > Thread 11 processing worker 1 > Thread 11 throw exception > Thread 18 processing worker 1 > From the output, thread 11 throw exception and thread 18 process later for > fail-over. From understanding, if one child actor failed, then parent actor > should invoke that child actor's preRestart method only, not for all child > actors. Is that correct? > > Thanks in advance! > > Regards, > George > > -- > >>>>>>>>>> Read the docs: http://akka.io/docs/ > >>>>>>>>>> Check the FAQ: > http://doc.akka.io/docs/akka/current/additional/faq.html > >>>>>>>>>> Search the archives: https://groups.google.com/group/akka-user > --- > You received this message because you are subscribed to the Google Groups > "Akka User List" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to akka-user+unsubscr...@googlegroups.com. > To post to this group, send email to akka-user@googlegroups.com. > Visit this group at http://groups.google.com/group/akka-user. > For more options, visit https://groups.google.com/d/optout. > -- Patrik Nordwall Typesafe <http://typesafe.com/> - Reactive apps on the JVM Twitter: @patriknw [image: Scala Days] <http://event.scaladays.org/scaladays-sanfran-2015> -- >>>>>>>>>> Read the docs: http://akka.io/docs/ >>>>>>>>>> Check the FAQ: >>>>>>>>>> http://doc.akka.io/docs/akka/current/additional/faq.html >>>>>>>>>> Search the archives: https://groups.google.com/group/akka-user --- You received this message because you are subscribed to the Google Groups "Akka User List" group. To unsubscribe from this group and stop receiving emails from it, send an email to akka-user+unsubscr...@googlegroups.com. To post to this group, send email to akka-user@googlegroups.com. Visit this group at http://groups.google.com/group/akka-user. For more options, visit https://groups.google.com/d/optout.