¿Cómo puedo comprobar si un actor remoto, para el que he obtenido un actorRef a través de actorFor, está vivo? Cualquier referencia a la documentación sería apreciada. Estoy usando Akka de Scala.Comprobando si Akka actor remoto está disponible
He visto referencias a los supervisores y al deathwatch, pero realmente no siento que mi caso de uso necesite tanta maquinaria pesada. Solo quiero que mi cliente compruebe si el maestro está usando una ruta conocida, y si se envía un mensaje presentándose. Si el maestro no está arriba, entonces debe esperar un poco y luego volver a intentarlo.
Actualización 2: Sugerencias: uso una prueba de ping-pong para ver si está activa. Entiendo que esto es algo así como
implicit val timeout = Timeout(5 seconds)
val future = actor ? AreYouAlive
try{
Await.result(future, timeout.duration)
}catch{
case e:AskTimeoutException => println("It's not there: "+e)
}
Creo que he sentido confundida por la presencia de excepciones en los registros, que se mantienen en la actualidad. P.ej.
- error: java.net.ConnectException: Conexión rechazada
- error: java.nio.channels.ClosedChannelException: null
Tal vez esto es sólo cómo funciona y que hay que aceptar los errores/advertencia en los registros en lugar de tratar de protegerse contra ellos?
¿Qué tal si simplemente envía el mensaje 'Ping' al actor (por supuesto, tiene que manejarlo) y espera a' Pong' durante un tiempo? –
Buena pregunta, hemos agregado la actualización. – Pengin
No, no debe esperar que las operaciones 'tell' /'! 'Arrojen una excepción porque el manejo del mensaje ocurre de forma asíncrona. En su lugar, debe enviar un 'Ping' y ** esperar ** para' Pong' durante un tiempo. En su actor remoto simplemente agregue: 'case _: Ping => remitente! Pong' y en local: 'remoteActor? Ping' –