2012-05-10 12 views
6

Ich baue etwas ähnliches (aber nicht identisch) mit dem Ask-Muster in Akka, wo ich einen temporären Akteur instanziieren muss, der eine einzelne Nachricht bearbeitet und sich dann selbst tötet. Ich habe den grundlegenden Workflow mit actorOf() einmal pro Anfrage implementiert, aber das fühlt sich nicht ganz richtig an, da es einen neuen Akteur jedes Mal auf einem neuen Pfad registriert.Wie starte ich einen temporären Schauspieler in Akka richtig?

Was ist der richtige Weg, dies zu tun?

+3

Warum brauchen Sie einen Schauspieler, wenn es nur eine einmalige ist? nutze einfach eine Zukunft? Zukunft ({process (msg)}) (context.dispatcher) pipeTo einigeOtherActor –

+0

In dem Kontext, ich brauchte es, um ein Akteur zu sein, so dass ich es als Absender an einen anderen Actor weitergeben konnte. Das größere Problem könnte jedoch das Design sein, das dies erfordert. – SoftMemes

Antwort

5

Es klingt wie Sie müssen ein future verwenden. Soweit ich verstehe, kümmern sich Akka-Futures um die Schaffung von Schauspielern & Entsorgung für Sie; Wenn Sie flatMap mehrere Futures zusammen finden, werden Sie feststellen, dass einige innerhalb desselben Akteurs ausgeführt werden, während für andere ein neuer erstellt wird. Um schamlos die Dokumentation paraphrasieren:

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

Ich denke, etwas wie oben könnte ausreichen? Schauen Sie sich das Dokument für weitere Beispiele an ...

@ viktor-clang könnte das anders wissen, aber ich denke nicht, dass Sie besonders besorgt sein sollten über die Anzahl der Akteure, die im allgemeinen Fall hervorgebracht werden; Sie sind viel billiger zu erstellen als OS-Threads.

Verwandte Themen