gpt4 book ai didi

java - Actor 回复非 Actor

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:50:53 28 4
gpt4 key购买 nike

我刚刚开始使用 AKKA,并且有一个关于非参与者代码如何与参与者代码对话的基本问题。

非参与者代码如何调用参与者并获得响应?我试过使用 Patterns.ask 从非 Actor 调用 Actor ,但这不起作用,因为没有 Actor 可以响应的“发送者”。

那我应该怎么做呢?

最佳答案

这应该可以正常工作。当您使用 ask 时,会创建一个轻量级参与者(我相信由 PromiseActorRef 表示)来表示发送者,以便可以发回响应以完成 >Future 通过 ask 创建。一个小例子来说明这一点。首先是测试 Actor :

class TestActor extends UntypedActor{
public TestActor(){

}

public void onReceive(Object msg){
getContext().sender().tell("bar", getContext().self());
}
}

然后是调用它的非参与者代码

import java.util.concurrent.TimeUnit;
import scala.concurrent.Await;
import scala.concurrent.Future;
import akka.actor.ActorRef;
import akka.actor.ActorSystem;
import akka.actor.Props;
import akka.pattern.Patterns;
import akka.util.Timeout;

public class AskTest {

public static void main(String[] args) throws Exception{
ActorSystem sys = ActorSystem.apply("test");
ActorRef ref = sys.actorOf(Props.create(TestActor.class), "mytest");
Timeout t = new Timeout(5, TimeUnit.SECONDS);
Future<Object> fut = Patterns.ask(ref, "foo", t);
String response = (String)Await.result(fut, t.duration());
System.out.println(response);
}
}

关于java - Actor 回复非 Actor ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18228846/

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