2017-02-13 2 views
0

Wir verwenden Akka-Framework für Interprozesskommunikation. Vor einigen Tagen identifizierte das QA-Team einige Anfragen, die sich in der Schwebe befanden. Bei einigen Anfragen wurden die Rückrufmethoden onSuccess() und onFailure() nicht aufgerufen. Die letzte Zeile des Protokolls zeigteakka future onsuccess onfailure beide nicht ausgeführt

"Charging Customer." 

und der Fluss für diese bestimmte Transaktion dort gestoppt. Das nächste Protokoll sollte entweder

"Charging response or Charging Failed" 

Was könnte der Grund für ein solches Verhalten sein? Könnte es daran liegen, dass der Dispatcher erstickt ist? Wir verwenden den Standard-Dispatcher.

-Code

log.debug("Charging Customer"); 
Future future = Patterns.ask(actorSelection, new Gson().toJson(request), timeout); 
future.onSuccess(new onChargingSuccess<>(ccRequest), context().system().dispatcher()); 
future.onFailure(new onFailureHandler(ccRequest), context().system().dispatcher()); 


private class onChargingSuccess<T> extends OnSuccess<T> { 
@Override 
public void onSuccess(T t) throws Throwable { 
     log.debug("Charging response:" + t.toString()); 
} 

private class onFailureHandler extends OnFailure { 
@Override 
    public void onFailure(Throwable thrwbl) throws Throwable { 
     log.info("Charging Failed"); 
} 
+0

Wie lange ist 'Timeout'? Und haben Sie verifiziert, dass die Protokollausgabe sichtbar ist? –

+0

Timeout beträgt 15 Sekunden. Die zeitgesteuerten Anforderungen werden protokolliert. Die Protokollausgabe ist in einer Datei sichtbar. –

Antwort

0

Nun ist es nicht wirklich eine Lösung, sondern das Modul das Problem behoben neu zu starten. Das Modul lief ein Jahr lang. Ich weiß, dass dies eine sehr allgemeine Frage ist, aber ich werde es hier behalten, nur für den Fall, dass wir das eigentliche Problem analysieren und die Lösung finden. Ich werde in diesem Fall aktualisieren.

Verwandte Themen