gpt4 book ai didi

scala - Akka 2.1 异常处理 (Scala)

转载 作者:行者123 更新时间:2023-12-04 05:11:58 24 4
gpt4 key购买 nike

我有一个监督 Akka Actor ,它使用路由器将消息转发给工作 Actor 。

我有一个包装主管的类,当我在该类上调用一个方法时,它“要求”主管做某事,然后我使用 Await.result(theFuture)等待结果(没有结果我不能继续)。

如果工作人员抛出异常,我想重新启动抛出异常的工作人员,并且我希望调用包装类的代码捕获异常。

我通过了 OneForOneStrategy到路由器构造函数,它返回 RESTARTException 的情况下.在 postRestart工作程序的方法,我记录了重新启动,因此我可以验证工作程序实际上已重新启动。

当 worker 抛出异常时,它会重新启动,但异常消失。 Future这是询问主管的结果,包含异常,但它是 akka.pattern.AskTimeoutException ,这是在 5 秒而不是 20 秒后抛出的,这是我挥之不去的隐式超时。异常实际上在工作程序启动后不到一秒发生。

问题一:如何在调用我的包装类的代码中从工作人员那里获取异常?

另外,worker的接收方法是这样的:

def receive = {
case r: Request =>
val response = ??? //throws an exception sometimes
sender ! response
}

有些东西正在将异常记录到控制台,但这不是我的代码。堆栈跟踪是:
[ERROR] [02/11/2013 21:34:20.093] [MySystem-akka.actor.default-dispatcher-9]  
[akka://MySystem/user/MySupervisor/MyRouter/$a] Something went wrong!
at myApp.Worker.$$anonfun$receive$1.applyOrElse(Source.scala:169)
at akka.actor.ActorCell.receiveMessage(ActorCell.scala:425)
at akka.actor.ActorCell.invoke(ActorCell.scala:386)
at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:230)
at akka.dispatch.Mailbox.run(Mailbox.scala:212)
at akka.dispatch.ForkJoinExecutorConfigurator$MailboxExecutionTask.exec(AbstractDispatcher.scala:502)
at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:262)
at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:975)
at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1478)
at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:104)
Source.scala的第169行是线路 val response = ???显示在 receive 的列表中方法同上。

问题2:谁将该异常记录到控制台,我该如何阻止它?

最佳答案

1)

try somethingThatCanFail() catch {
case e: Exception => sender ! Status.Failure(e); throw e
}

“告诉失败”导致调用者得到一个包含异常的失败。抛出“e”会导致 oneForOneStrategy 被调用,从而重新启动工作器。

2)

It is the actor system itself that logs the failure, and the only way to quiet it down is to filter out things by creating and configuring your own LoggingAdapter as described here http://doc.akka.io/docs/akka/2.1.0/scala/logging.html There is a ticket for changing this https://www.assembla.com/spaces/akka/tickets/2824 but it is targeted for Akka 2.2



回答者 https://groups.google.com/forum/#!topic/akka-user/fenCvYu3HYE

关于scala - Akka 2.1 异常处理 (Scala),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14820489/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com