2012-05-10 17 views
6

Estoy construyendo algo similar (pero no idéntico) al patrón ask en Akka, donde necesito instanciar un actor temporal que manejó un solo mensaje y luego se mata a sí mismo. Implementé el flujo de trabajo básico usando actorOf() una vez por solicitud, pero esto no parece del todo correcto, ya que cada vez registrará un nuevo actor en una nueva ruta.¿Cómo puedo activar adecuadamente a un actor temporal en Akka?

¿Cuál es la forma correcta de hacerlo?

+3

¿Por qué necesita un actor si se trata de una sola vez? solo usa un futuro? Futuro ({process (msg)}) (context.dispatcher) pipeTo algúnOtroActor –

+0

En el contexto, necesitaba que fuera un actor para poder pasarlo como remitente a otra tienda. Sin embargo, el problema más grande puede ser el diseño que lo requiera. – SoftMemes

Respuesta

5

Parece que necesita usar un future. Por lo que tengo entendido, los futuros de Akka se ocupan de la creación del actor & disposición para usted; si flatMap varios futuros juntos notará que algunos se ejecutan dentro del mismo actor, mientras que para otros se crea uno nuevo. Parafraseando parafraseando la documentación:

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 
    } 
    }); 
}); 

Supongo que algo como lo anterior podría ser suficiente? Consulte el documento para ver más ejemplos ...

@ viktor-clang podría saber lo contrario, pero no creo que deba estar particularmente preocupado por la cantidad de actores generados en el caso general; son mucho más baratos de crear que los hilos del sistema operativo.

Cuestiones relacionadas