akka-stream - 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 操作位于算术异常映射之后。我知道在任何情况下将日志操作放入异步流都会记录异常。但是,我想知道,是否有人可以在流程中没有日志操作的情况下向我解释这种行为。