这里有些东西卡住了。我有一个创建Actor A和B的SupervisorActor,依此类推。没有ActorA或ActorB的子actor。让我们说Actor A和B都命中数据库并获得SQL异常。这将传播到整个链的SupervisorActor。当我捕获SQL异常时,我还需要记录Actor A有一个SQL异常。但是我该如何实现呢?
有没有办法实现类似于以下内容的方法: 是!我想知道我们是否可以实现以下目标:
try{
saveUser()
}
catch {
case b: BatchUpdateException =>
logger.error("We received a BatchUpdateException when trying to save the user")
throw b
}
case e: Exception =>
logger.error("Some other exception occured ")
throw e
}
try{
saveSeller()
}
catch {
case b: BatchUpdateException =>
logger.error("We received a BatchUpdateException when trying to save the Seller details")
throw b
}
case e: Exception =>
logger.error("Some other exception occured ")
throw e
}
PS:我不确定监管策略是否是实现我要达到的目标的正确方法。我正在尝试探索新的可能性。
答案 0 :(得分:0)
使用SupervisorStrategy集中管理者参与者内部的错误处理逻辑是比在各个参与者之间分散/复制错误管理逻辑更好的方法。特别是,将Exception
处理逻辑表示为类型decider
的{{1}}参数有助于提高代码的可维护性。
当我捕获SQL异常时,我还需要记录Actor A有一个SQL异常。但是我该如何实现呢?
在主管演员中,您始终可以通过PartialFunction[Throwable, Directive]
包括相应的演员引用,来记录主管演员中各个子演员的Exception
。以下是管理人员角色的简单示例,它记录了几个孩子角色中特定于角色的sender
,并采取了相应的Exception
动作:
Resume/Stop/Escalate