gpt4 book ai didi

Scala Actor : doesn't receive messages

转载 作者:行者123 更新时间:2023-12-04 16:35:52 24 4
gpt4 key购买 nike

我遇到了这样的问题:我向 Actor 发送消息,但它没有收到,特别是代码:

class TestActor extends Actor {
def receive = {
case _ =>
println("null")
case Landau(args) =>
println("Got a Job" + args)
sender ! "Done"
}
}

和发件人,通过“询问”方法:

worker.ask(Landau(List("1", "2", "3")))

结果,它不打印任何东西,也不打印“null”,知道吗?

编辑:这是在主要执行中:

val system = ActorSystem("TestApplication")
val ref = system.actorOf(Props(new TestActor), "test")

我不知道是否相关,但主要对象和代码“worker.ask...”在不同的包中

最佳答案

问题似乎是这两行:

val worker = workerContext.actorFor("akka://TestApplication/user/test")
worker.ask(Landau(List("1", "2", "3")))

在第一行中,actorFor 在 Akka 2.2 中被弃用,你应该使用 actorSelection现在。 actorSelection 的用法有点不同,因为它不像 actorFor 那样返回 ActorRef,而是返回一个 actorSelection,您可以使用它来获取 ActorRef。您可以通过发送 Identify 消息并接收包含您想要的 ActorRef 的 ActorIdentity 消息来完成此操作。或者你干脆用ActorSelection的resolveOne方法,我用过几次actorSelection,都是这么用的。这将返回一个持有您的 ActorRef 的 Future。所以你的代码应该是

val workerFuture = context actorSelection("/TestApplication/user/test") resolveOne
val worker = workerFuture = Await.result(actorFuture, 10 seconds)

第二个问题可能是 ask 需要稍微不同的语法,根据 docs :

worker ask Landau(List("1", "2", "3"))

试一试。

关于Scala Actor : doesn't receive messages,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19265965/

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