gpt4 book ai didi

java - 如何在 Play Framework 2 中从外部向 Actor 发送消息?

转载 作者:行者123 更新时间:2023-11-30 03:45:07 26 4
gpt4 key购买 nike

我是 Akka 新手,尝试在 Java 的 Play Framework 2 中编写一些代码并使用 Akka。要创建一个 Actor 并向其发送测试消息,我有:


public class Global extends GlobalSettings {

@Override
public void onStart(Application app) {
final ActorRef testActor = Akka.system().actorOf(Props.create(TestActor.class), "testActor");
testActor.tell("hi", ActorRef.noSender());
}
}

这项工作非常好,我看到我的 Actor 收到了我的消息,这是我的 Actor 的代码:


public class TestActor extends UntypedActor {

@Override
public void onReceive(Object message) throws Exception {
if(message.toString().equals("hi")){
System.out.println("I received a HI");
}else{
unhandled(message);
}
}
}

非常简单。但是,如果我尝试从 Controller 发送消息:


public static Result index() {
final ActorRef testActor = Akka.system().actorFor("testActor");
testActor.tell("hi", ActorRef.noSender());
return ok(index.render("Your new application is ready."));
}

我在终端上收到此消息:

[INFO] [09/20/2014 11:40:30.850] [application-akka.actor.default-dispatcher-4] [akka://application/testActor] 来自 Actor 的消息 [java.lang.String] [akka://application/deadLetters] 到 Actor[akka://application/testActor] 未交付。 [1]遇到的死信。可以使用配置设置“akka.log-dead-letters”和“akka.log-dead-letters-during-shutdown”关闭或调整此日志记录。

有人可以帮我解决这个问题吗?为什么第一个用法有效而第二个用法失败?谢谢

最佳答案

actorFor 方法需要完整路径,并且您的 actor 位于用户空间中,因此您必须使用 actorFor("/user/testActor")。目前,您正在将其发送到 application/testActor,这将是 ActorSystem 本身的顶级 Actor。

顺便说一下,actorFor 已被弃用(至少在 Scala API 中),并被 actorSelection 取代。

欲了解更多信息,请参阅excellent documentation .

关于java - 如何在 Play Framework 2 中从外部向 Actor 发送消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25947543/

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