首页 > 解决方案 > Akka Streams 在异步边界记录

问题描述

如果将 Akka Streams 的 .log 行为用于有助于异步边界的 .async 操作的流中,我会尝试了解它的 .log 行为。为了重现该问题,我创建了一个小示例:

    val flow = Flow[Int]
      .map({ _ =>
        1 / 0
        "foobar"
      }) // throwing ArithmeticException: / by zero
      .async
      .to(Sink.ignore)

    val (killSwitch, future) = Source(-5 to 5)
      .divertTo(flow, _ => true)
      .map(_ + 1)
      .log("error logging")
      .viaMat(KillSwitches.single)(Keep.right)
      .toMat(Sink.ignore)(Keep.both)
      .run()

由于被零除,流中的1/0操作将导致 ArithmeticException。如果存在异步操作,则不会记录异常。如果不存在异步操作,则由于主流中存在日志操作而记录异常。我想知道如果存在异步操作,为什么不记录异常,特别是当 .async 操作位于算术异常映射之后。我知道在任何情况下将日志操作放入异步流都会记录异常。但是,我想知道,是否有人可以在流程中没有日志操作的情况下向我解释这种行为。

标签: akka-stream

解决方案


推荐阅读