Akka Java - 动态创建递归的儿童演员?

时间:2014-05-08 07:34:15

标签: java akka

据我了解,onReceive只能在任何给定时间点由一个线程执行。

假设我有一个像这样定义的无类型演员:

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
        }


   }
}

我基本上想在不使用期货的情况下使用Akka。与此同时,我希望我的演员不要尽可能地阻挡。是否可以在我的onReceive中生成递归子actor,soley用于处理来自其他actor的特定消息?

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

这种方法有效吗?像这样在飞行中创造演员的后果是什么?

1 个答案:

答案 0 :(得分:5)

你做得恰到好处,这就是演员模型预见到演员互动的处理方式。使用ask模式做了一些实际上相同的事情(但是产生了一个优化形式的单一回复演员),所以如果你不想使用Futures,这就是选择退出的方式。