2017-02-13 88 views
0

我们使用Akka框架进行进程间通信。几天前,QA团队发现了一些陷入僵局的请求。对于某些请求,不调用onSuccess()和onFailure()回调方法。日志的最后一行显示为akka future onsuccess onfailure都没有执行

"Charging Customer." 

并且该特定事务的流程停在那里。下一个日志应该是

"Charging response or Charging Failed" 

这种行为的原因是什么?这可能是由于调度员被堵塞?我们正在使用默认的调度程序。

代码

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

'timeout'有多长?你有没有证实日志输出是可见的? –

+0

超时时间为15秒。记录超时请求。日志输出在文件中可见。 –

回答

0

那么它不是一个真正的解决方案,但在重新启动解决了该问题的模块。该模块运行了一年。我知道现在这使得它成为一个非常普遍的问题,但我会把它留在这里,以防万一我们挖掘实际问题并找到解决方案。我会在这种情况下更新。