Akka Java-动态创建递归子角色?

HiC*_*123 5 java akka

据我了解,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
        }


   }
}
Run Code Online (Sandbox Code Playgroud)

我本质上是想使用Akka而不使用期货。同时,我希望我的演员不要尽可能多地阻止。是否可以在我的onReceive,soley中生成递归子角色以处理来自其他角色的特定消息?

本质上,在我的“ if(message.equals(“ dbresponse”))”中,我只想记录数据库响应,而不是在ExampleActor中更改状态。

这种方法行得通吗?像这样即时创建演员的后果是什么?

Rol*_*uhn 5

您所做的完全正确,这就是Actor模型预见到Actor交互的处理方式。使用该ask模式实际上可以实现相同的功能(但是会生成优化形式的单答复角色),因此,如果您不想使用Futures,则可以选择退出。