Akka アクター、より具体的にはを使用して作成されたクラスター シングルトンを監視しようとしてClusterSingletonManager
います。例外、ログ、およびアクタのライフ サイクルをより細かく制御しようとしています。
残念ながら、ソリューションを実装した後、Singleton アクターが例外をスローするようにしましたが、ログには何も表示されず、アクターまたはクラスターもシャットダウンされませんでした。
私の実装は次のとおりです。
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)
}
}
では、Cluster Singlegon を監視することさえ可能ですか? 可能であれば、この問題にどのように対処すればよいですか?