【发布时间】:2016-06-13 17:43:44
【问题描述】:
以下函数调用一个actor:
def read () = {
val system = ActorSystem(Constant.actorSystem)
val manageData = system.actorOf(Props[ManageData], name = "theactor")
val num = -1
implicit val timeout = Timeout(60 seconds)
val future = manageData ? num
val result = Await.result(future, timeout.duration)
}
在manageData内子进程抛出异常:
throw new Exception("Negative number")
如何在read() 中捕获它?
【问题讨论】:
-
抛出异常将重启actor,创建父actor并在子actor中完成所有工作,并通过覆盖其监督策略来处理子actor在其父actor中抛出的异常。
-
那么将错误从参与者返回给调用者的最佳做法是什么?
-
要么通过向发送者发送消息将信息传递给发送者,要么在此actor的父级中处理此异常并相应地对其进行监督。
-
我只是扩展@curious 的评论,如果错误是意外的——比如运行时异常——应该在父母的监督策略中处理。但如果错误具有业务语义,它很可能不是错误或异常,应作为消息发送回
sender()。