1
後監控,以重新啓動它的阿卡演員我有一個演員一個會拋出一個Exception
這一個:如何將異常
import akka.actor._
import scala.concurrent.duration._
import scala.concurrent.ExecutionContext.Implicits.global
class MonitorActor extends Actor with ActorLogging {
context.system.scheduler.schedule(initialDelay = 0.seconds, interval = 3.seconds) {
val r = Math.random()
if (r > 0.8) throw new Exception
else log info "missed"
}
def receive = {
case _ =>
}
}
我想,當Exception
時重新啓動它。
爲了做到這一點,我已經做到了這一點(如解釋here):
val system = ActorSystem("scheduler")
val monitorActorProps = Props(classOf[MonitorActor])
val supervisor = BackoffSupervisor.props(
Backoff.onFailure(
monitorActorProps,
childName = "error-actor",
minBackoff = 1.seconds,
maxBackoff = 12.seconds,
randomFactor = 0.2
))
system.actorOf(supervisor, name = "echoSupervisor")
但是,當發生異常時不重新啓動的演員。 (如果我使用onStop
而不是onFailure
,則它的行爲方式相同)。
我在做什麼錯?
我不確定要理解你的回答,如果我在非頂級演員內部做同樣的事情(即我啓動了一個啓動主管的演員),我沒有任何區別。 – Simon