gpt4 book ai didi

java - Akka Java - 即时创建递归子 Actor ?

转载 作者:搜寻专家 更新时间:2023-10-31 20:02:28 25 4
gpt4 key购买 nike

据我了解,在任何给定时间点,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
}


}
}

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

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

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

最佳答案

您做的完全正确,这就是 Actor 模型预见处理 actor 交互的方式。使用 ask 模式做的事情实际上是相同的(但生成了一种优化形式的单一回复 actor),所以如果你不想使用 Futures,这是选择退出的方式。

关于java - Akka Java - 即时创建递归子 Actor ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23535524/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com