Akka流错误处理。如何知道哪一行失败?

知道不多

我读了这篇关于Akka Streams错误处理的文章

http://doc.akka.io/docs/akka/2.5.4/scala/stream/stream-error.html

并写了这段代码。

val decider: Supervision.Decider = {
  case _: Exception => Supervision.Restart
  case _ => Supervision.Stop
}

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

val source = Source(1 to 10)
 val flow = Flow[Int].map{x => if (x != 9) 2 * x else throw new Exception("9!")}
 val sink : Sink[Int, Future[Done]] = Sink.foreach[Int](x => println(x))
 val graph = RunnableGraph.fromGraph(GraphDSL.create(sink){implicit builder => s =>
  import GraphDSL.Implicits._
  source ~> flow ~> s.in
  ClosedShape
})
val future = graph.run()
future.onComplete{ _ =>
  actorSystem.terminate()
}
Await.result(actorSystem.whenTerminated, Duration.Inf)

这工作得很好.....除了我需要扫描输出以查看未处理的行。我有办法打印/记录失败的行吗?[没有在我编写的每个流程中都放置明确的try / catch块吗?]

因此,例如,如果我正在使用actor(而不是流),那么我可能已经编写了actor的生命周期事件,并且可以记录actor重新启动时的记录以及重新启动时正在处理的消息。

但是这里我没有明确地使用actor(尽管它们是在内部使用的)。流/源/接收器是否存在生命周期事件?

fcat

只需对您的代码进行少量修改:

  val decider: Supervision.Decider = {
  case e: Exception =>
    println("Exception handled, recovering stream:" + e.getMessage)
    Supervision.Restart
  case _ => Supervision.Stop
}

如果您将有意义的消息传递给流中的异常(例如,该行),则可以在监管决策器中将其打印出来。

我曾经println给出一个简短的答案,但强烈建议您使用一些日志记录库,例如scala-logging

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

C / C ++编译器如何知道错误在哪一行

MySQL如何知道哪一行不匹配?

如何知道哪一行的总和最大

如何知道用户点击了 TextView 的哪一行

如何找到哪一行导致解包错误

DapperPlus和Oracle,知道插入数据库时哪一行抛出错误

哪一行导致“operator==”错误

将限制设置为1时,Solr如何知道要返回哪一行?

mysql_fetch_row:它如何知道哪一行?

拖到桌子上时,如何知道哪一行掉到了?

如何知道plist文件的哪一行不正确

接收信号时如何知道正在执行哪一行代码

在Visual Studio中调试循环时,如何知道哪一行出错?

我的python代码如何自动知道在Excel中停止在哪一行

如何知道使用Java和Postgresql更改表中的哪一行

缓冲读取器如何知道要读取哪一行?

知道在php循环中单击了哪一行

go中的错误处理,哪个文件和一行?

查找MATLAB正在处理.dat文件的哪一行

监视formControlNames的更改以及如何知道formGroup for循环中更改的哪一行-响应式表单

如何知道哪一行在Kendo网格中没有事件的情况下处于编辑模式

哪一行导致此量角器错误?

SSMS批量插入=错误+这是哪一行?

春季批处理失败时如何继续处理处理器中的下一行?

Node.js如何知道回调的第一个参数是否是错误处理程序?

Akka测试主管错误处理

如何在Python中处理AssertionError并找出发生在哪一行或语句上?

如何在Python中处理AssertionError并找出发生在哪一行或语句上?

如何判断 DataGrid 的哪一行被点击?