2015-05-01 8 views

Odpowiedz

10

Co robiłem w B jest ponownie wysłać wiadomość do B w preRestart, patrz poniżej kod.

@Override 
    public void preRestart(final Throwable reason, final scala.Option<Object> message) throws Exception 
    { 
    getSelf().tell(message.get(), getSender()); 
    }; 

Aby upewnić się, że nie kończy się w nieskończonej pętli, skonfigurować strategię administratora w A w następujący sposób:

private final SupervisorStrategy strategy = new OneForOneStrategy(3, Duration.Inf(), 
     new Function<Throwable, SupervisorStrategy.Directive>() 
    { 
    @Override 
    public Directive apply(final Throwable t) throws Exception 
    { 
     if (t instanceof SpecificException) 
     { 
     return SupervisorStrategy.restart(); 
     } 
     return SupervisorStrategy.escalate(); 
    } 
    });  

ten powinien gurarantee, że problematyczne jest tylko ponownie wysyłać wiadomość trzy razy. Czy ktoś może mi doradzić, czy to dobra praktyka, czy może połączy mnie z lepszym rozwiązaniem?

+0

Ludzie powiedzieli, że to dobrze: http://stackoverflow.com/questions/13542921/akka-resending-the-breaking-message – invis