我理解onReceive只能在任何给定时间点上由一个线程执行。
假设我定义了一个未经类型化的actor,如下所示:
import akka.actor.ActorRef;
import akka.actor.Props;
import akka.actor.UntypedActor;
public class ExampleActor extends UntypedActor {
private ActorRef databaseActor;
@Override
public void preStart() {
ActorRef databaseActor = getContext().system().actorOf(Props.create(DatabaseActor.class));
}
@Override
public void onReceive(Object message) throws Exception {
if (message.equals("start")) {
// spawn a child actor of myself!
ActorRef child = getContext().actorOf(Props.create(ExampleActor.class));
databaseActor.tell("fetch", child);
}
if (message.equals("dbresponse")) {
// just log the repsonse here!
}
if (message.equals("something else")) {
// possibly mutate state
}
}
}
我想在不使用futures的情况下使用Akka。同时,我希望我的actors尽可能地不阻塞。在我的onReceive中,仅用于处理其他actors特定消息的目的,是否可以生成递归的子actors?
在我的"if (message.equals("dbresponse"))"中,我只想记录一个数据库响应而不是改变我的ExampleActor的状态。
这种方法可行吗?像这样动态创建actors有什么后果?