组件BEAUTIFUL
正在使用她的内部akka.actor.Actor
来执行某些操作..(例如“代理”)
还有其他MAN
组件非常希望与BEAUTIFUL
当BEAUTIFUL
找到MAN
有价值时,在与他“互动”之前,她同意接收他的电话号码(让我们称之为ErrorHandler
),你我知道只是给他一个电话,以防他早上离开并在床边的桌子上忘了他的劳力士
BEAUTIFUL
虽然是“高维护”(不是全部......),每次在BEAUTIFUL
的内部演员身上发生不好事情时(例如OmgBrokenNailException
1}},UglyPurseThrowable
等。),她疯了,需要完全停止并使用该电话号码拨打MAN
(例如errorHandler.getOnItNowHoney( message, throwable )
)
AKKA主管允许注册两种类型的FaultHandlers => OneForOneStrategy
和AllForOneStrategy
,如果基础Actor重写preRestart / postRestart,它可以访问实际的“throwable”,例如:
override def preRestart( reason: Throwable ) { // do with throwable... }
问题是这两种策略都会尝试重启Actor,这不是我要找的东西。我正在寻找演员用“throwable”调用外部ErrorHandler
并停止。
如果我不使用这些策略,当从Actor中抛出异常时,在Actor上调用postStop
,这很酷,但它不会引入“throwable”:
override def postStop() { // no access to "throwable"... }
帮助MAN
获取throwable
答案 0 :(得分:5)
在Akka 2中,您应该使用DeathWatch
答案 1 :(得分:1)
如果我理解你的问题,我认为将你的消息处理包装在try / catch块中并让actor处理发送Throwable并自行停止是有意义的。
def receive = {
case message => try { message match {
case ... //your actual message processing goes here
}} catch {
case t: Throwable => {
errorHandler ! t
self.stop
}
}
}