私はAkkaのaskパターンに似た(しかし同一ではない)何かを構築しています。そこでは、単一のメッセージを処理してから自殺する一時的なアクターをインスタンス化する必要があります。リクエストごとにactorOf()を使用して基本的なワークフローを実装しましたが、毎回新しいパスに新しいアクターが登録されるため、これは適切ではありません。
これを行う適切な方法は何ですか?
私はAkkaのaskパターンに似た(しかし同一ではない)何かを構築しています。そこでは、単一のメッセージを処理してから自殺する一時的なアクターをインスタンス化する必要があります。リクエストごとにactorOf()を使用して基本的なワークフローを実装しましたが、毎回新しいパスに新しいアクターが登録されるため、これは適切ではありません。
これを行う適切な方法は何ですか?
フューチャーを使用する必要があるようです。私が理解している限り、Akka先物はあなたのために俳優の作成と処分を引き受けます。flatMap
複数の先物を一緒に使用すると、同じアクター内で実行されるものもあれば、新しいアクターが作成されるものもあります。ドキュメントを恥知らずに言い換えるには:
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
}
});
});
上記のようなもので十分だと思いますか?その他の例については、ドキュメントを確認してください...
@ viktor-clangは別のことを知っているかもしれませんが、一般的なケースでスポーンされるアクターの数について特に心配する必要はないと思います。OSスレッドよりもはるかに安価に作成できます。