Akka 我如何在阿克卡恰当地激发一个临时演员?

Akka 我如何在阿克卡恰当地激发一个临时演员?,akka,Akka,我正在构建与Akka中的ask模式类似(但不完全相同)的东西,在Akka中,我需要实例化一个临时参与者,该参与者处理一条消息,然后自杀。我已经在每个请求中使用actorOf()实现了一次基本工作流,但这感觉不太正确,因为它每次都会在新路径上注册一个新的参与者 做这件事的正确方法是什么?听起来你需要使用一种新的方法。据我所知,Akka futures负责为您创建和处置演员;如果将多个期货组合在一起,您会注意到一些期货在同一个参与者中执行,而另一些则创建了一个新的期货。要无耻地解释文档,请执行以下操

我正在构建与Akka中的ask模式类似(但不完全相同)的东西,在Akka中,我需要实例化一个临时参与者,该参与者处理一条消息,然后自杀。我已经在每个请求中使用actorOf()实现了一次基本工作流,但这感觉不太正确,因为它每次都会在新路径上注册一个新的参与者


做这件事的正确方法是什么?

听起来你需要使用一种新的方法。据我所知,Akka futures负责为您创建和处置演员;如果将多个期货组合在一起,您会注意到一些期货在同一个参与者中执行,而另一些则创建了一个新的期货。要无耻地解释文档,请执行以下操作:

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
    }
   });
});
导入akka.japi.Function;
导入java.util.concurrent.Callable;
进口akka.dispatch.Futures;
导入akka.dispatch.OnComplete;
Future f=Futures.Future(新的可调用(){
公共字符串调用(){
返回“你好”+“世界”;
}
},system.dispatcher()),然后(new OnComplete()){
未完成的公共void(可丢弃错误、字符串结果){
//对错误和/或结果进行处理
}
});
});
我想这样的事情就足够了?查看文档了解更多示例


@viktor clang可能知道其他情况,但我认为你不应该特别担心在一般情况下产生的演员数量;创建这些线程比创建操作系统线程便宜得多。

如果只是一次性的,为什么还需要演员?只是利用未来?Future({process(msg)})(context.dispatcher)通过管道传输到其他actor在上下文中,我需要它成为一个参与者,这样我就可以将它作为发送者传递给另一个actor。然而,更大的问题可能是需要这样做的设计。