Come posso verificare se un attore remoto, per il quale ho ottenuto un attoreRef tramite actorFor, è vivo? Qualsiasi riferimento alla documentazione sarebbe apprezzato. Sto usando Akka da Scala.Verifica se l'attore Akka remoto è disponibile
Ho visto riferimenti a supervisori e deathwatch, ma non sento davvero che il mio caso d'uso abbia bisogno di macchinari così pesanti. Voglio solo che il mio cliente controlli se il master è attivo usando un percorso noto e se invia un messaggio che presenta se stesso. Se il master non è attivo, allora dovrebbe aspettare un po 'e riprovare.
Aggiornamento 2: I suggerimenti sono che uso solo un test di ping pong per verificare se è vivo. Capisco che questo è qualcosa di simile a
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)
}
penso sono stato confuso dalla presenza di eccezioni nei registri, cui restano ora. Per esempio.
- Errore: java.net.ConnectException: Connection refused
- Errore: java.nio.channels.ClosedChannelException: null
Forse questo è solo come funziona e mi devono accettare gli errori/avviso nei registri piuttosto che cercare di proteggere contro di loro?
Che dire semplicemente inviando il messaggio "Ping" all'attore (ovviamente deve gestirlo) e attendere 'Pong' per un po 'di tempo? –
Buona domanda, ho aggiunto l'aggiornamento. – Pengin
No, non dovresti aspettarti operazioni 'tell' /'! 'Per generare un'eccezione perché la gestione del messaggio avviene in modo asincrono. Invece dovresti inviare un 'Ping' e ** wait ** per 'Pong' per un po 'di tempo. Nel tuo attore remoto aggiungi semplicemente: 'case _: Ping => mittente! Pong' e in quello locale: 'remoteActor? Ping' –