尝试捕捉演员总是不好的做法吗?

时间:2015-08-07 15:03:09

标签: exception-handling akka actor

我知道演员的激励处理通常应该采用主管策略。但这对所有情况都有效吗?

示例

  • 有一个演员是某种数据库。
  • 有几个源actor可以向数据库actor添加数据。
  • 这些演员的父母子女关系未知。
  • 要向数据库actor添加数据,必须在数据库actor上注册源actor。
  • 如果未注册的源actor尝试向数据库添加数据,则会引发异常。

如果我严格遵守akka演员的错误处理策略,那么监督演员就必须处理这种情况。

我宁愿在数据库actor中捕获异常并向源actor发送一条消息,说明出错了。然后源actor可以做出反应(注册到数据库并再次尝试)。

这是一个好习惯吗?或者总演员设置错了?如果首选策略,应该如何实施?

1 个答案:

答案 0 :(得分:0)

在您认为合适的情况下捕捉异常并将其作为回应是完全正确的。我建议使用Scala的Try,如:

Try(dangerousOperation()) match {
  case Success(res) => sender() ! res
  case Failure(ex)  => sender() ! UnableToStoreThingy("reasons...", ex)
}

或者类似的东西(你也可以try.failed.map { ex => doThings(ex) }),取决于你的风格偏好。