Ho un attore che alla ricezione di un messaggio, cerca nel file system un file e restituisce il percorso completo del file.mittente all'interno di un futuro
Per mantenerlo asincrona, ho fatto:
def receive ={
case s:String => {
val f = future{
val ans = search(s)
println("Input Request: "+s+" output:"+ans+" "+sender.path)
}
f.onComplete{
case Success(x) => sender ! x
case Failure(y) => println("Could not complete it")
}
}
ma ho osservato che restituisce il messaggio al akka://FileSystem/deadLetters
e non il sender
. La documentazione dice che:
Valido solo per l'attore stesso, quindi non chiuderlo sopra e * pubblicarlo su altri thread!
Quindi vuol dire che dovrò necessariamente mantenerlo sincrono? C'è un altro modo?
Perché utilizzare un futuro? È un'operazione di I/O (e quindi possibilmente di blocco), quindi metti l'attore sul dispatcher blocking-io. Se è necessario cercare più file contemporaneamente, avere più istanze in esecuzione. –