Akka流:流阶段被中断,没有任何错误

时间:2018-12-06 18:45:01

标签: scala akka

我有akka类型的流

  source
    .filter( // Filtering logic)
    .map(// Mainly used for logging)
    .async
    .map(cmd => { log.info("Some more logging here"); cmd}
    .via(flow)
    .async
    .runWith(sink)

我面临一个奇怪的问题。我的流程阶段是一个很耗时的流程。对于某些元素,它是部分执行的。我看不到任何类型的错误。似乎线程在执行时突然掉线。这段代码在生产服务器上运行,我观察到流中大约有150个元素被部分处理。

我对Scala和Akka还是陌生的,如果我使用任何错误的术语来描述我的问题陈述,我深表歉意。

1 个答案:

答案 0 :(得分:1)

在创建materializer时使用监督策略添加更多日志记录。这将记录所有错误并保持流运行。默认情况下,流程在发生第一次异常时停止。

private val decider: Supervision.Decider = { ex =>
  logger.error(ex.getMessage, ex)
  Supervision.Resume
}

private implicit val materializer: ActorMaterializer = ActorMaterializer(
  ActorMaterializerSettings(system).withSupervisionStrategy(decider)
)