为什么 Akka Streams 会吞掉我的异常?

2024-03-02

为什么异常在

import akka.actor.ActorSystem
import akka.stream.ActorMaterializer
import akka.stream.scaladsl.Source

object TestExceptionHandling {
  def main(args: Array[String]): Unit = {
    implicit val actorSystem = ActorSystem()
    implicit val materializer = ActorMaterializer()(defaultActorSystem)

    Source(List(1, 2, 3)).map { i =>
      if (i == 2) {
        throw new RuntimeException("Please, don't swallow me!")
      } else {
        i
      }
    }.runForeach { i =>
      println(s"Received $i")
    }
  }
}

默默无视?我可以看到打印后流停止了Received 1,但没有记录任何内容。请注意,问题通常不是日志记录配置,因为如果我设置,我会看到很多输出akka.log-config-on-start = on in my application.conf file.


我现在使用的是自定义的Supervision.Decider确保正确记录异常,可以这样设置:

val decider: Supervision.Decider = { e =>
  logger.error("Unhandled exception in stream", e)
  Supervision.Stop
}

implicit val actorSystem = ActorSystem()
val materializerSettings = ActorMaterializerSettings(actorSystem).withSupervisionStrategy(decider)
implicit val materializer = ActorMaterializer(materializerSettings)(actorSystem)

另外,正如所指出的维克·巴生 https://stackoverflow.com/users/227803/viktor-klang,在上面给出的示例中,异常也可以通过以下方式“捕获”

Source(List(1, 2, 3)).map { i =>
  if (i == 2) {
    throw new RuntimeException("Please, don't swallow me!")
  } else {
    i
  }
}.runForeach { i =>
  println(s"Received $i")
}.onComplete {
  case Success(_) =>
    println("Done")
  case Failure(e) =>
    println(s"Failed with $e")
}

但请注意,这种方法不会帮助您

Source(List(1, 2, 3)).map { i =>
  if (i == 2) {
    throw new RuntimeException("Please, don't swallow me!")
  } else {
    i
  }
}.to(Sink.foreach { i =>
  println(s"Received $i")
}).run()

since run()回报Unit.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 Akka Streams 会吞掉我的异常? 的相关文章

  • 类型不匹配;发现:长 需要:Int

    我有一个应该返回 Long 的方法 但我收到一个错误 type mismatch found Long required Int 方法如下 def getRandom IMEI from Long to Long Long if from
  • 反序列化时出现 Gson 异常(无参数构造函数不存在)

    我遇到了一个问题 该问题仅在 5000 台设备中的 10 台中出现 无法用我的模拟器和测试设备重现它 这似乎是一个非常具体的问题 仅涉及少数设备 我所拥有的只是堆栈跟踪和我的代码 因此 我正在针对黑洞进行开发 只有在 GooglePlay
  • 无法使用 Spark 结构化流在 Parquet 文件中写入数据

    我有一个 Spark 结构化流 val df spark readStream format kafka option kafka bootstrap servers localhost 9092 option startingOffset
  • 组合部分函数

    我有两个偏函数f and g 它们没有副作用并且执行速度快 将它们组合成另一个部分函数的最佳方法是什么h这样h isDefinedAt x iff f isDefinedAt x g isDefinedAt f x 如果h是一个返回一个函数
  • Scala SBT 版本依赖性二进制兼容性错误 scala-xml

    我有一个在 GitHub 上托管的项目 我使用 scala steward 来保持我的插件和依赖项最新 这在一段时间内有效 但现在使用此类自动更新却变成了一场噩梦 事情是这样的 在我的plugins sbt中 我依赖于scoverage 它
  • 索引越界异常

    你好 这段代码将返回indexoutofboundsException我真的不知道为什么 我想从中删除这些对象pointlist它们与中的对象相同list public void listOfExternalPoints List
  • Scala:如何定义带有变量参数列表的匿名函数?

    在 Scala 中 如何定义接受可变数量参数的匿名函数 scala gt def foo blah Int gt 3
  • 为什么 astyanax (java) 无法识别我的 scala 案例类参数列表中的 @Id 注解值?

    所以这是我的困境 我有一个域模型 其中有一堆 scala 中的案例类 例如User and Organization 在我的数据访问层 dao 存储库等 中 我使用 astyanax 来自 netflix 的 java 库 及其实体持久器将
  • Android蓝牙权限问题

    首先 抱歉我的英语不好 我是西班牙人 并且是 Android 开发的新手 我正在开发一个简单的蓝牙文件发送器 我基于BluetoothChat android示例一步一步 现在我向用户发出蓝牙激活请求 并选择是或否选项应用程序崩溃 我拥有清
  • scala 中的模拟案例类:Mockito

    在我的游戏应用程序中 我打算模拟一个案例类 我可以这样做 但它创建了一个所有成员变量都为空的对象 有没有办法创建案例类的模拟对象 以便该对象可以初始化一些成员 case class User name String address Stri
  • 为什么我可以使用 Scala REPL 中的 Java 库,但不能使用脚本中的 Java 库?

    我正在开发一个使用 Joda Time 的 Scala 脚本 直到今天 这一切都运行良好 不知怎的 有些东西发生了变化 它不再起作用了 这有效 scala cp lib Welcome to Scala version 2 9 1 fina
  • 关于编写惯用的 Golang 的建议

    我正在掌握 Golang 的做事方式 首先是一些示例代码 package main import log os func logIt s string f os OpenFile errors log os O RDWR os O CREA
  • JSLint 抱怨我的 try/catch

    javascript 运行时JSLint http jslint com 对我大喊大叫 我不知道为什么 jslint browser true devel true evil true undef true nomen true eqeqe
  • Spark-shell 使用不同版本的 Scala。使用 homebrew 安装 scala 和 apache-spark

    我使用 homebrew 安装了 scala 和 apache spark 它安装了 scala 2 12 4 和 apache spark 2 2 0 但是 如果您结帐spark shell version它使用不同的 scala 版本
  • Scala:需要类类型,但找到了 T

    我发现了与此特定问题类似的问题 但是该问题是由于有人试图直接实例化 T 造成的 在这里 我试图创建一个特征 它是一个通用接口来扩展类并将它们自动存储在数据库中 例如 Riak 使用classOf T 使用 Scala 2 10 这是我的代码
  • Play框架:读取包含空值的Json

    我正在尝试在 Play Scala 程序中读取 Json 数据 Json 的某些字段可能包含空值 因此我定义 Reads 对象的方式如下 implicit val readObj Reads ApplyRequest JsPath a re
  • akka http配置中的idle-timeout和request timeout有什么区别?

    我查阅了文档并发现了这些 空闲连接自动关闭的时间 设置infinite完全禁用空闲连接超时 空闲超时 10 秒 Defines the default time period within which the application has
  • Spark Streaming 中是否需要检查点

    我注意到 Spark 流示例也有检查点代码 我的问题是检查点有多重要 如果是为了容错 那么在此类流应用程序中发生故障的频率是多少 这一切都取决于您的用例 假设您正在运行一个流作业 它仅从 Kafka 读取数据并计算记录数 如果您的应用程序在
  • 尝试创建 jar 时出现 UNRESOLVED DEPENDENCIES 错误

    我正在尝试构建一个 Scala jar 文件以在 Spark 中运行它 我正在关注这个tutorial http spark apache org docs latest quick start html 当尝试使用 sbt 作为构建 ja
  • 带可变参数的 Spark UDF

    如文档中所示 列出最多 22 个参数是唯一的选择吗 https spark apache org docs 1 5 0 api scala index html org apache spark sql UDFRegistration ht

随机推荐

  • UVa 的 3n+1 挑战

    我在运行 编程挑战 中的 3n 1 问题 时遇到问题 我已经尝试了在 google 上找到的所有 Java 解决方案 甚至是 Stack Overflow 上的解决方案 但没有一个有效 它们都报告 错误答案 我还找到了一个可行的 C 解决方
  • Android EditText 输入类型 textShortMessage

    inputType 的目的是什么textShortMessage https developer android com reference android text InputType html TYPE TEXT VARIATION S
  • 如何在列表中的任意位置插入元素?

    我有这个 gt gt gt a 1 4 7 11 17 有什么办法可以增加4个字符吗 随机地在其他元素之间实现 例如 1 4 7 11 17 你可以简单地这样做 import random for in range 4 a insert r
  • NSMutableArray 属性初始化和更新

    假设我有一个 property 它是一个 NSMutablearray 其中包含四个对象使用的分数 它们将被初始化为零 然后在 viewDidLoad 期间和应用程序的整个操作过程中更新 由于某种原因 我无法全神贯注于需要做什么 特别是在声
  • 删除其他工作表上的列中*不*存在值的行

    我有一个包含两张纸的 LibreOffice Calc 文件 表 2 只有一列 A 其中有很多数字 在工作表 1 中 每行的 A 列也包含一个数字 我想从工作表 1 中删除 A 列中具有值的所有行not appear anywhere在表
  • 在 json 模式中定义键值对的正确方法是什么

    如何在 json 模式中定义键值对对象 正确 方式 我想定义这个 id 99 info name somename href someUrl 以下两项是否准确 1 type object name MyObj properties id t
  • 运算符 ++ 中的 Int 参数

    class myClass public void operator myInstance void operator int myInstance 除了让编译器区分myInstance and myInstance 是可选的int论证中o
  • App Engine (Python) 数据存储区预调用 API 挂钩

    背景 假设我正在为 GAE 制作应用程序 并且我想使用API 钩子 http code google com appengine articles hooks html BIG EDIT 在这个问题的原始版本中 我描述了我的用例 但有些人正
  • 为什么有时 jQuery 选择器会返回类似“a.fn.init”的内容? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我不知道我的 Chrome 浏览器发生了什么 但突然出现了这样的行为 div my 控制台中的内容与以前完全不同 我曾经经历过一次 但后来又
  • NSOpenPanel 无法获得焦点

    首先 我对 Swift 完全陌生 如果我的问题看起来微不足道 我很抱歉 我想要一个非常简单的命令行程序 它打开一个对话框来选择文件或文件夹 该工具不得运行带有在 Dock 中弹跳的图标的实际完整应用程序 而是运行一些微妙的东西 就是这样 我
  • 使用 Direct2D/DirectWrite 确定文本边界框

    ID2D1RenderTarget DrawGlyphRun采用以下参数 D2D1 POINT 2F baselineOrigin in CONST DWRITE GLYPH RUN glyphRun in ID2D1Brush foreg
  • 如何将 pandas 中的字符串转换为日期时间格式?

    我有一个专栏I DATE数据框中的字符串 对象 类型称为train如下图所示 I DATE 28 03 2012 2 15 00 PM 28 03 2012 2 17 28 PM 28 03 2012 2 50 50 PM 如何转换I DA
  • 条件面板 R 中的多个条件闪亮

    在闪亮的应用程序中使用条件面板时是否可以有多个条件 我想隐藏几个选项卡的特定 UI 组件 以下是我正在尝试的内容 但当我有多个条件时它似乎并不适用 library shiny library shinyWidgets library shi
  • 缺少引用 OLEDB 连接类型的库

    我从以下代码中得到了SSIS 团队博客 http blogs msdn com b mattm archive 2008 08 22 accessing oledb connection managers in a script aspx转
  • 无法访问的服务 - appsactivity

    我今天在执行我的 google apps 脚本 webapp 时开始收到消息 无法访问服务 appsactivity 有谁知道是否会停电 无法访问的服务 appsactivity 之前的答案是正确的 但提到的问题现已作为重复项关闭 http
  • 使用 Python 和 Selenium 将照片上传到 Craigslist

    在windows10上使用python3 selenium和firefox 这个程序很简单 它直接跳转到 craigslists 的 发布新列表 页面 上传多张照片 然后提交 我遇到的问题是我无法控制对话框使用硒导航到正确的文件 brows
  • 多个 MessageDialog 应用程序崩溃

    I use MessageDialogues在我的应用程序的几个地方 问题是 无论何时MessageDialog 或系统警报 例如功能警告 处于活动状态 另一个我的MessageDialog被调用时 应用程序毫无例外地崩溃或崩溃Unatho
  • 不同用户的会话超时时间不同

    是否可以为不同的用户设置不同的会话超时 我需要为管理员提供 180 分钟的会话 为非管理员用户提供 20 分钟的会话 目前 所有用户的单个会话超时 我们正在使用 web config 密钥 任何帮助 将不胜感激 Setting Sessio
  • MICE 中的条形图不显示分类变量

    我正在使用miceR 中的包进行多重插补 我仅使用数值变量进行了几次插补 插补方法是预测均值匹配 当我使用stripplot imp 我可以看到所有变量的观察值和估算值 当我估算分类变量和数值变量的组合时 就会出现问题 数值变量的插补方法是
  • 为什么 Akka Streams 会吞掉我的异常?

    为什么异常在 import akka actor ActorSystem import akka stream ActorMaterializer import akka stream scaladsl Source object Test