Ich versuche, einen Akka Actor zu überwachen, genauer gesagt eine Cluster Singleton erstellt mit ClusterSingletonManager
. Ich versuche, mehr Kontrolle über Ausnahmen, Protokolle und Actors Lebenszyklus zu erreichen.Wie überwacht man Cluster Singleton in Akka?
Leider habe ich nach der Implementierung einer Lösung einen Singleton-Actor ausgelöst Ausnahmen, aber nichts wurde in den Protokollen angezeigt, noch der Actor oder Cluster wurde heruntergefahren.
Meine Implementierung ist wie folgt:
object SingletonSupervisor {
case class CreateSingleton(p: Props, name: String)
}
class SingletonSupervisor extends Actor with ActorLogging {
override val supervisorStrategy =
OneForOneStrategy(maxNrOfRetries = 0, withinTimeRange = 1.minute) {
case x: ActorInitializationException =>
log.error(s"Actor=<${x.getActor}> trowed an exception=<${x.getCause}> with message=<${x.getMessage}>")
Stop
case x: ActorKilledException => Stop
case x: DeathPactException => Stop
case x: Exception =>
log.error(s"Some actor threw an exception=<${x.getCause}> with message=<${x.getMessage}>, trace=<${x.getStackTrace}>")
Escalate
}
def receive = {
case CreateSingleton(p: Props, name: String) =>
sender() ! context.actorOf(p)
context.actorOf(ClusterSingletonManager.props(
singletonProps = p,
terminationMessage = PoisonPill,
settings = ClusterSingletonManagerSettings(context.system)),
name = name)
}
}
So ist es sogar möglich, Supervisor ein Cluster Singlegon? Wenn möglich, wie soll ich dieses Problem angehen?
Thank schaffen, ich diese Lösung beendet werden. Aber es lässt immer noch nicht zu, alle Schauspielerbäume vollständig zu überwachen. – yamilife