Sembra che sia necessario utilizzare uno future. Per quanto ho capito, i futures Akka si occupano della creazione degli attori & smaltimento per voi; se fai un numero di flatMap
più di un futuro, noterai che alcuni eseguono all'interno dello stesso attore, mentre per altri ne viene creato uno nuovo. Per parafrasare spudoratamente la documentazione:
import akka.japi.Function;
import java.util.concurrent.Callable;
import akka.dispatch.Futures;
import akka.dispatch.OnComplete;
Future<String> f = Futures.future(new Callable<String>() {
public String call() {
return "Hello" + "World";
}
}, system.dispatcher()).andThen(new OnComplete<String>() {
public void onComplete(Throwable err, String result) {
// do something with the err and/or result
}
});
});
Suppongo che qualcosa come sopra potrebbe essere sufficiente? Guarda il documento per altri esempi ...
@ viktor-clang potrebbe sapere altrimenti, ma non penso che dovresti preoccuparti particolarmente del numero di attori generati nel caso generale; sono molto più economici da creare rispetto ai thread del sistema operativo.
fonte
2012-05-15 14:11:12
Perché hai bisogno di un attore se è solo una tantum? basta usare un futuro? Futuro ({process (msg)}) (context.dispatcher) pipeTo someOtherActor –
Nel contesto, avevo bisogno che fosse un attore in modo che potessi passarlo come mittente a un altro attore. Il problema più grande potrebbe essere il design che richiede questo, comunque. – SoftMemes