簡體   English   中英

Scala actor:不接收消息

[英]Scala actor: doesn't receive messages

我遇到了這樣的問題:我向演員發送消息,但它沒有收到,特別是代碼:

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")))

結果,它不打印任何東西,既不“無效”,任何想法?

編輯:這是在主要執行:

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")))

在第一行中,在Akka 2.2中棄用了actorFor,你現在應該使用actorSelection actorSelection的用法有點不同,因為它不會像actorFor那樣返回ActorRef,而是可以用來獲取ActorRef的actorSelection。 您可以通過發送Identify消息並接收包含所需ActorRef的ActorIdentity消息來完成此操作。 或者您只是使用ActorSelection的resolveOne方法,我使用actorSelection的次數很少,我總是這樣使用它。 這將返回一個持有ActorRef的Future。 所以你的代碼應該是

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

第二個問題可能是問題需要稍微不同的語法,根據文檔

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

試一試。

發現:所以,看起來它是方法actor的錯誤,我正在使用這個工人:

val worker = workerContext.actorFor("akka://TestApplication/user/test")

而不是這個:

val worker = workerContext.actorOf(Props[TestActor])

現在它的工作原理。 但我不確定這個選擇,因為我應該指出那個地址。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM