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");
}
Wie lange ist 'Timeout'? Und haben Sie verifiziert, dass die Protokollausgabe sichtbar ist? –
Timeout beträgt 15 Sekunden. Die zeitgesteuerten Anforderungen werden protokolliert. Die Protokollausgabe ist in einer Datei sichtbar. –