scala - Akka 流(Scala): Filtering out exceptions

标签 scala akka-stream flatmap

我的 akka 流管道中的步骤之一是在接收到无效输入时抛出异常的转换。我想放弃这些有问题的输入。因此,我想出了以下解决方案:

...
.map( input => Try( transformation( input ) ).toOption )
.filter( _.nonEmpty )
.map( _.get )
...

实际上,这只是一个 flatMap,需要 3 个步骤。

有更直接的 akka 方法吗?

最佳答案

您可以使用监督策略。摘自文档:

val decider: Supervision.Decider = {
  case _: ArithmeticException => Supervision.Resume
  case _                      => Supervision.Stop
}

val flow = Flow[Int]
  .filter(100 / _ < 50)
  .map(elem => 100 / (5 - elem))
  .withAttributes(ActorAttributes.supervisionStrategy(decider))

您可以配置决策器来执行您需要的任何操作。如果您需要为所有异常跳过该元素,请使用

 case _: Throwable => Supervision.Resume

查看 https://doc.akka.io/docs/akka/current/stream/stream-error.html

关于scala - Akka 流(Scala): Filtering out exceptions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67582017/

相关文章:

java - 在 IntelliJ IDEA 中显示 Maven/Sbt 托管项目的 JavaDoc/ScalaDoc

algorithm - 简单循环太慢

database - 在客户端和服务器之间共享的代码中表示 DB 实体的惯用方式

scala - 在 Play 2.5 中编写 BodyParser

pyspark - 使用 Pyspark 将不同的行值转换为具有相应行的不同列

android - 如何在 Kotlin 中展平列表列表?

scala - 如何将函数应用于 Spark DataFrame 的列?

akka-stream - 如何创建具有不同输入和输出类型的流以在图形内部使用?

scala - 使用相同的 Actor 创建​​ Actor 发布者和 Actor 订阅者

scala - 为什么 Finatra 使用 flatMap 而不仅仅是 map ?